Tableau Serverの自動インストール(サイレントインストール)手順

アイキャッチ(Tableau)

Tableau ServerはGUI形式のインストーラーが提供されており、インストールウィザードに従うだけで比較的簡単にインストールが可能です。が、インストールの手間はできるだけ省きたいもの。インストーラーを実行してあとは待つだけ、、が理想です。

そんな要望に応えてか、Tableau Serverのv10.1からはインストーラーにサイレントインストールの機能が追加され、上記の「インストーラーを実行してあとは待つだけ」、あるいはCloudFormationを使ってAWSのインフラ構築〜Tableau Serverのインストールまでを一気通貫で実行、が実現できるようになりました。

今回はこのサイレントインストールの機能を使ったTableau Serverの自動インストール/アップグレードの手順をご紹介します。

Tableau Serverのインストール手順

はじめにTableau Serverのインストールに必要な作業を整理します。

  1. (Multi-Node構成の場合のみ)各ワーカーノードでインストールプログラムを実行
  2. プライマリーノードでインストールプログラムを実行
  3. ライセンスをアクティブ化
  4. レジストレーション(利用者情報登録)
  5. Tableau Server起動
  6. 初期管理者ユーザー登録

このうちTableau Serverのサイレントインストールの機能がカバーするのは1と2のみです。ただし3以降の作業はコマンドベースで実行可能なため、スクリプトを作成することで1〜6の全ての作業が自動化出来ます。

自動化スクリプトの前に、ひとまず1〜6の具体的な作業内容を見ていきます。

1. (Multi-Node構成の場合のみ)各ワーカーノードでインストールプログラムを実行

/SILENTまたはVERYSILENTスイッチを付けてワーカーのインストールプログラムを実行します。前者は「ダイアログボックスや UIは表示される(ただしそれらを操作することは出来ない)」、後者は「ダイアログボックスやUIは表示されない」という違いがあります。

また使用許諾契約書 (EULA)への同意を示すためにACCEPTEULAスイッチと、プライマリノードのIP アドレスを指定する/PRIMARYIPスイッチが必要です。

<Setup file> /VERYSILENT /ACCEPTEULA /PRIMARYIP="172.1.1.1"

その他Tableau Serverのインストールプログラムを で利用可能なオプションについてはTableauのオンラインドキュメントTableau Server の自動インストールまたはアップグレードで確認できます。

2. プライマリーノードでインストールプログラムを実行

/SILENTまたはVERYSILENTスイッチを付けてインストールプログラムを実行します。ワーカーノードと同様に使用許諾契約書(EULA)への同意を示すためにACCEPTEULAスイッチも必要です。

インストール時にTableau Serverの設定をカスタマイズしたい場合は、以下のように/CUSTOMCONFIGスイッチを使ってインストールプログラムにconfigファイルを渡します。

<Setup file> /VERYSILENT /ACCEPTEULA /CUSTOMCONFIG="path\filename"

configファイルは以下のようなyaml形式で作成します。

---
config.version: 16
worker0.vizqlserver.procs: 4
worker0.backgrounder.procs: 2
worker0.cacheserver.procs: 2
worker0.dataserver.procs: 2
worker0.dataengine.procs: 1
svcmonitor.notification.smtp.canonical_url: http://tableau-server.example.com
svcmonitor.notification.smtp.enabled: true
svcmonitor.notification.smtp.from_address: tableau-alert@example.com
svcmonitor.notification.smtp.password: P@ssword!
svcmonitor.notification.smtp.send_account: smtp_user
svcmonitor.notification.smtp.server: smtp.example.com:587
svcmonitor.notification.smtp.target_addresses: yawata.yutaka@example.com

この例ではTableau Serverの各プロセス数とメール通知を設定しています。

注意事項として、ファイルの最初の行で「config.version」の指定が必要です。「config.version」の値はTableau Serverのバージョン毎に決まっている固定値です。

  • Tableau Server 10.1:config.version: 15
  • Tableau Server 10.2:config.version: 16

configファイルはTableau社がGithub上でシングルノード版マルチノード版のサンプルを公開しているので、こちらをベースに作成するか、または既存のTableau Serverがある場合は、「<Tableau Serverインストールフォルダ>\config」にある「tabsvc.yml」を基にカスタマイズするのがよいかと思います。

configファイルで設定可能なパラメーターはTableauのオンラインドキュメント自動化されたインストール構成オプションで確認できます。

3. ライセンスをアクティブ化

tabadmin activateコマンドを使います。引数にライセンスキーを指定します。

tabadmin activate --activate  --key <license>

4. レジストレーション(利用者情報登録)

tabadmin trgisterコマンドを使います。引数にレジストレーション情報ファイル(JSONファイル)を指定します。

tabadmin register --file tabregister.json

レジストレーション情報ファイルは以下のような形式で、利用者の氏名、会社名などを登録します。

{
    "first_name" : "Yutaka",
    "last_name" : "Yawata",
    "email" : "yawata.yutaka@example.com",
    "company" : "Classmethod, Inc.",
    "title" : "Analyst",
    "department" : "Other",
    "industry" : "Other",
    "phone" : "03-123-4567",
    "city" : "Chiyoda-ku",
    "state" : "Tokyo",
    "zip" : "101-0025",
    "country" : "Japan"
}

レジストレーション情報ファイルで設定が必要なパラメーターはTableauのオンラインドキュメント登録入力ファイル オプションで確認できます。

5. Tableau Server起動

tabadmin startコマンドでTableau Serverを起動します。

tabadmin start

6. 初期管理者ユーザー登録

tabcmd initialuseコマンドを使います。引数にユーザー名とパスワードを指定します。

tabcmd initialuser --username "admin" --password "P@ssword!"

Tableau Serverのアップグレード手順

アップグレードの場合は、

  1. プライマリーノードでインストールプログラムを実行
  2. Tableau Server起動

の2つを実行します。アップグレードの場合は既存の設定が引き継がれますので、configファイルを渡したりは原則不要です。

インストール/アップグレードの自動化

さて、ここまででTableau Serverの自動インストール/アップグレードに必要な作業が整理できましたが、実際にこれらの作業を自動実行するためのスクリプトが必要です。

ありがたいことにTableau社がGithub上にPython製のサンプルスクリプトを公開しており、こちらを利用することができます。

tableau/server-install-script-samples: Sample code showing how to script Tableau Server installations

このリポジトリに含まれるものは大きく以下の2つです。

  • Tableau Serverの自動インストール/アップグレードスクリプト(ScriptedInstaller.py)
  • AWS上にTableau Serverを構築するためのCloudFormationテンプレート

後者はEC2の起動&Tableau Serverのインストールまでを含んだテンプレートで、以下の3つのテンプレートが用意されています。

テンプレート 構成 備考
Single-Node構成 EC2 デフォルトVPC利用
Single-Node構成(SSLあり) EC2、ELB デフォルトVPC利用、ELBでSSLを終端
Multi-Node構成(SSLあり) VPC、EC2 × 4(Tableau(Primary, Worker1, Worker2), Bastion)、ELB、NAT Gateway 新規VPC作成、ELBでSSLを終端

Multi-Node構成の場合はTableau Serverは全てプライベートサブネットに配置され、管理用のBastionサーバーと、インターネットへのアクセス用にNAT Gatewayが作成されます。

「SSLあり」の場合は、あらかじめSSL証明書を用意しておく必要がありますのでご注意ください(証明書をインポート or AWS Certificate Managerを利用して取得)。

自動インストールスクリプト(ScriptedInstaller.py)

まずは自動インストールスクリプト(ScriptedInstaller.py)の使い方から見ていきます。

事前準備

Pythonのインストール

前述の通りこのスクリプトはPython製のですので、Tableau ServerをインストールするWindows ServerにPython本体と必要なライブラリ(PyYaml)をインストールします。

Python本体はWindows用のインストーラーが用意されているのでそちらを使ってインストールします。Tableau Serverの自動インストールスクリプト(ScriptedInstaller.py)はPythonの2.7.12をターゲットにしているのでこのバージョンをインストールするのが確実です。

PyYamlはpipを使ってインストールします。

C:¥>pip install pyyaml

Tableau Serverのインストーラーのダウンロード

Tableau Serverのインストーラー(例:TableauServer-64bit-10-2-0.exe)はTableauの公式サイトからダウンロードしておきます。

レジストレーション情報ファイルとconfigファイルの作成

上述のレジストレーション情報ファイルとconfigファイルもあらかじめ作成しておきます。

シークレットファイルの作成

「シークレットファイル」を使ってTableau Serverのサービス起動ユーザー(runas_user)および初期管理者ユーザー(content_admin)のユーザー名/パスワードを指定することができます。ファイルは以下のようにJSON形式で作成します。

{
    "runas_user":"workgroup\\serviceuser",
    "runas_pass":"P@ssword!",
    "content_admin_user":"admin",
    "content_admin_pass":"P@ssword!"
}

「runas_user」を指定しなかった場合は「NT AUTHORITY\NETWORK SERVICE」がサービス起動ユーザーに設定されます。

自動インストールの実行

必要なファイル一式を任意のフォルダに格納し、以下のようにスクリプトを実行します。

python ScriptedInstaller.py install --installerLog .\tabinstall.txt --installDir C:\TableauServer --secretsFile secrets.json --configFile tabsvc.yml --registrationFile registration.json --licenseKey ABCD-1234-5678-EFGH-99II TableauServer-64bit-10-2-0.exe

この例ではインストールログ、インストール先フォルダ、シークレットファイル、configファイル、レジストレーションファイル、ライセンスキーを指定してスクリプトを実行しています。

なお、このスクリプトはワーカーノードのインストールには対応していません。Multi-Node構成の場合はあらかじめワーカーノードをセットアップした上で、プライマリーノードでこのスクリプトを実行するというステップを踏む必要が必要あります。(ただしワーカーノードのセットアップに必要な作業はインストールプログラムの実行のみですので、自動化は難しくないと思います。)

その他スクリプトで利用可能なオプションはREADMEで確認できます。

自動アップグレードの実行

アップグレードの場合は以下のようにスクリプトを実行します。

python ScriptedInstaller.py upgrade --installerLog .\tabupgrade.txt --installDir C:\TableauServer TableauServer-64bit-10-2-0.exe

デフォルトでは、アップグレード処理前にTableau Serverのバックアップが実行されます。日次でバックアップを取得しているため改めてのバックアップは不要といった場合、--fastuninstallオプションを付けることでバックアップ処理をスキップできます。

CloudFormation テンプレート

続いてCloudFormationテンプレートの使い方を見ていきます。今回はSingle-Node構成(SSLなし)版のテンプレートを取り上げます。

事前準備

S3にファイルを配置

以下の2つのファイルをS3の任意のバケットに配置します。

  • Tableau Serverのインストーラー(例:TableauServer-64bit-10-2-0.exe)
  • Tableau Serverの自動インストールスクリプト(ScriptedInstaller.py)

cfn-init でこれらのファイルをS3からダウンロードじ実行する形になっています。

なお、PythonのインストーラーはPythonの公式サイトからダウンロードする形になっているので事前にS3に配置する必要はありません。

またTableau Serverのconfigファイルとレジストレーション情報ファイルはCloudFormationのスタック作成時に入力した値から動的に生成する形になっているため、これらのファイルも事前に用意しておく必要はありません。

AMI IDの設定

CloudFormationテンプレートの中にAMI IDがハードコーディングされています(デフォルトではWindows 2012 R2 英語版のAMIがセットされています)。必要に応じてこのAMI IDを修正します。

CloudFormationスタック作成

スタック作成の細かい手順説明は省略しますが、パラメータとして入力が必要なものは大きく以下の4つです。

  • EC2の設定値(AZ、インスタンスタイプなど)
  • Tableau Serverの管理者ユーザー
  • Tableau Serverのレジストレーション情報
  • Tableau Serverのconfig(プロセス数など)

  • EC2の設定値(AZ、インスタンスタイプなど)

tableau-server-quick-start_1

  • Tableau Serverの管理者ユーザー、レジストレーション情報

tableau-server-quick-start_2

  • Tableau Serverのconfig(プロセス数設定)

tableau-server-quick-start_3

まとめ

インストールスクリプト(ScriptedInstaller.py)での自動インストールは前提として、Pythonのインストールや各種設定ファイル(configファイル、レジストレーション情報ファイルなど)の作成が必要となるため、それ単体では劇的な作業工数削減にはならないかと思いますが、CloudFormationや各種プロビジョニングツールを使ってTableau Serverのインストールを自動で実行できる条件が整ったのは大きな進歩かと思います。

なお、Tableau Server on AWSのCloudFormationテンプレートはAWS Quick Startsでも公開されています。こちらも参考にしつつ、Tableau Serverの自動インストールをもう少し突き詰めてみたいと思います。

AWS Cloud Roadshow 2017 福岡