Tableau Bridge for Linuxやってみた

2024/02/09 11:37 Shintaro 0 Comments

こんにちは、Tableau SEのShintaroです。
今回はTableauのバージョン2023.3で追加されたTableau BridgeをLinuxで動かす検証手順のようなものを紹介したいと思います。

前提情報は下記となります。
  • クラウド→AWS
  • OS→CentOS 7 with HVM
  • スペック→m5.xlarge (4vCPU, 16GB)
  • ストレージ→150GiB
  • 検証したデータソース→MySQL、PostgreSQL、Redshift
  • 作業PC→Macでのターミナル
また、具体的なアーキテクチャーはこのようになっています。
Bastionは踏み台のことで、Tableau DesktopからはVPNを通じて各データソースにアクセスできるよう設定しておきました。

今回はあくまでTableau BridgeをLinuxで動かすまでの手順のご紹介となりますので、AWSでの構築については割愛します。
1点重要な情報としては、Tableau Bridgeは基本的にはアウトバウンド通信しかしないので、Bridge→DB/DWH(アウトバウンド)、およびDB/DWH←Bridge(インバウンド)
の許可、およびTableau Cloudへのアクセス、つまりインターネットへのアウトバウンド許可は必須となってきます。
Tableau CloudのIPアドレスについては、Podごとに異なり、こちらに記載がありますので、ご参照ください。

なお、実際の運用では、AWSやLinuxはもちろん、Dockerの知識は必要となり、オーケストレーションしていこうとするとKubernetesの知識もあると良いかもしれません。
ただし、今回のやってみた!はそこらへんがよくわからない方に向けてもなるべく丁寧に記載していきます。

では開始!


(0) AWSで各サービスの起動
これは言わずもがななので、はしょりますが、各サーバーや、サーバーを介したDB/DWHへの接続は確認しておきましょう。

(1) 作業PCからBastion→CentOSへアクセス

ssh -i [キーパス] ec2-user@[パブリックIP] 
ssh -i [キーパス] centos@[内部IP]

これも言わずもがなでしょうか。もしここから・・・という場合はsshのコマンドの意味をインターネットでご確認ください。 

アクセスできたら、ユーザーがcentosとなります。

(2) Dockerエンジンのインストール

もし、Dockerエンジンがすでにインストールされているイメージを利用してEC2を立ち上げた場合はここはスキップで構いません。

また、 Dockerがアップデートされたらここはうまくいかなくなる可能性もあるので、ホームページでチェックしたほうが無難となります。

最初にリポジトリを設定し、

sudo yum install -y yum-utils 

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Dockerをインストールします。

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

バージョンを指定する場合は、 yum list docker-ce --showduplicates | sort -r で確認して、docker-ceとdocker-ce-cliの後にバージョンを付けましょう。

そして、最後にDockerの開始とhello-worldイメージによるテストです。

sudo systemctl start docker

sudo docker run hello-world

これにて完了です。では次にいきましょう。

 (3) Bridgeコンテナイメージの作成

まずは、Tableau Bridgeのrpmパッケージが必要になるので、

sudo curl -OL [ダウンロードURL]

とかで持ってきましょう。ダウンロードのURLはこちらで確認できます。

続いて、作業ディレクトリを作っておき、

sudo mkdir Docker

cd Docker/

rpmファイルを移動させて、

sudo mv ./~/[Tableau Bridgeのファイル名].rpm ./

命令させるDockerfileを作ります。場所は任意です。

sudo touch Dockerfile

そして、Dockerfileには下記のような命令文をviで書きます。

# Centos 7 is the supported base image

FROM centos:7

# Update Packages

RUN yum -y update

# Copy the bridge RPM package, install it, then remove it from the image

COPY <Tableau Bridgeファイル名>.rpm/ <コンテナパス>

RUN ACCEPT_EULA=y yum install -y $(find . -name *.rpm) && rm -rf *.rpm

<コンテナパス>はコンテナ内でrpmファイルを置く場所なので/app/とかが一般的な気がします。

そしてRUN_ACCEPT_EULA=yはTableau利用規約に沿ったインストールという意味なので必ずつけましょう。

最後にイメージの構築です。

 sudo docker buildx build --platform=linux/amd64 -t bridge_base .

うまくいけばここでいうと、bridge_baseというイメージが作成されます。

ここで2つのオプションを紹介します。

・構成設定ファイル

Tableau Bridgeの構成設定に関しては、TabBridgeClientConfiguration.txtファイルで管理しており、編集してコンテナをアップデートさせるよう設定する必要があります。

詳しくは割愛しますが、こちらに情報がまとまっています。

・ドライバー

Tableau BridgeではWindows版でもそうでしたが、MySQLやRedshiftへのアクセスにドライバーのインストールが必要になります。

ですので、例えば、ドライバーインストール用に別のDockerfileを用意して、ドライバーをインストールする命令文を記載し、

sudo touch Dockerfile_driver

sudo vi Dockerfile_driver

ここには↓書く(MySQLの場合)

# Using previously built bridge_base image

FROM bridge_base

COPY [ドライバーファイル名].rpm ./

RUN yum install -y [ドライバーファイル名].rpm

最後に先ほど作ったbridge_baseのイメージの上位レイヤーとしてイメージを作成すれば自動化できます。

sudo docker build -t bridge_final -f Dockerfile_driver .

これは結構マストの可能性高いですね。

(4) Tableau CloudのPAT作成

今回Tableau BridgeからTableau Cloudへ繋ぐ場合、PAT(パーソナルアクセストークン)が必要になりますので、あらかじめ作っておきましょう。

Tableau Cloudにログインをして、右上のユーザーアイコンから[マイアカウント設定]より、個人用アクセストークンを作成可能です。

トークン名とシークレットが必要になるので保管しましょう。

(5) Bridgeワーカー起動

これで最後です。

ただ、まずはロケールの設定ですね。特にMySQLではこれやってないとエラーになる事象は確認が取れています。

Docker側で設定を毎回するか、CentOS上で設定していまうかどちらかとなりますが、後者だと、

export LANG="en_US.utf8"
export LANGUAGE="en_US.utf8"
export LC_ALL="en_US.utf8"

を/etc/profileに追記する流れとなります。

続いて、Bridgeコンテナと対話型で繋がっていきましょう。

sudo docker container run -it bridge_final /bin/bas

でコンテナが開始され、rootでアクセスできます。

そして、先ほど作成したPAT情報をtxtファイルにJSON形式で書込み保存します。

cd /home/ touch MyTokenFile.txt

vi MyTokenFile.txt

ここでは、

{"トークン名": "シークレット"}

のような形で書き込みます。

そしてそして、セキュリティ強化のためのchmodです。

chmod 600 MyTokenFile.txt

では最後にワーカー起動です。

/opt/tableau/tableau_bridge/bin/TabBridgeClientWorker -e --patTokenId="[トークン名]" --userEmail="[ログインID]" --client="myBridgeAgent" --site=”[サイト名]" --patTokenFile="/home/MyTokenFile.txt"

TabBridgeClientWorkerのヘルプを見るのがいいですが、引数にTableau Cloudへの接続情報を入れないといけないので、間違いがないようコマンドを用意します。

無事に成功すると下記のようにService Startedとなり、終了です。

念のためTableau Cloudで左メニューの[設定]からBridgeタブに遷移すると、先ほど--clientにて設定したBridge名がコンピューター名として接続済みとなっていることが確認されました。

このページでは必要に応じて、プライベートネットワークの許可リスト(ドメイン/IP)とプールを構成して、Bridgeを割り当ててください。

また、MySQLなどDB/DWHで実際Tableau Cloudで接続確認すると、無事抽出が確認できました。

万が一できない場合は、プールの設定、もしくはネットワーク設定などを再度確認しましょう。


いかがでしたでしょうか。

私の個人的な感覚ですが、Linux慣れていたら、Windowsよりはるかに楽だと思います。また、Kubernetesで複数コンテナをオーケストレーションさせるよう構成を組んであげれば、コストパフォーマンスが著しく向上すると思います!

今後Kubernetesも挑戦していこうかと思いますので、その際は記事を投稿しようかな。

読んで頂きありがとうございました。

なお、Salesforceの公式とまではいきませんが、手順をまとめた資料がありますので、こちらもぜひご参照・ご活用くださいませ!

また、Tableauのヘルプページも参考になるかと思います。


0 コメント: