Tableau CloudからTableau Bridgeを介してデータソースへ仮想接続の作成・更新を行うにはドメイン指定が必要
はじめに
業務でTableau Bridgeを利用してTableau CloudとAWSのプライベートサブネットに存在するRefshift Serverlessを接続する機会がありました。その際にドキュメント等を参照しながら進めていたのですが、AWSサービスなどと比べてナレッジが少なく見えたので共有します。
基本的にはクラスメソッドさんのDevelopersIOの以下記事を読めば大体なんとかなるかと思います。(私も非常に参考にさせていただきました。安原さん、本当にありがとうございます。)
中でも接続プールについては触れている記事がなかったのでそれを補完したいです。
構成
Tableau CloudからAmazon VPC 内のRedshift Serverlessのデータソースに接続・データ抽出しています。
Redshift Serverlessはプライベートサブネットに存在し、そのデータ仲介はTableau Bridgeが行っています。Tableau BridgeはプライベートサブネットのEC2インスタンスで動作しています。
そのEC2ではTableau Desktopを起動し、Redshift Serverlessのデータソースを作成、Tableau Cloudにパブリッシュ可能です。
Tableau Bridgeがインターネットに出ていくためにはNATゲートウェイを経由しています。
今回はRedshift Serverlessを一例としていますが、Tableau Cloudと接続できるものであれば互換可能と言えます。
環境の前提
- Tableau Cloudのライセンスを所有しており、Tableau CloudでTableau Bridgeを認識している
- 以下図のような状態です。これはTableau Cloudのトライアル版でも再現可能です。
- 以下図のような状態です。これはTableau Cloudのトライアル版でも再現可能です。
- Redsihft Serverlessは名前空間とワークグループが存在し、クエリ可能な状態
- Tableau BridgeインスタンスとRedshift Serverlessはネットワーク通信可能な状態
- インスタンスプロファイルやRedshift Serverlessの名前空間でIAMロールを設定できますが、接続においては関係ありません。
ドメイン指定をしていないとどうなるのか・指定したらどうなるのか
上図のようにプライベートネットワークの許可リスト
にどのドメインも存在しない場合、以下の現象が発生します。
- Tableau Desktopからパブリッシュはできるのに更新(抽出接続)ができない
- Tableau Desktopからパブリッシュ時、「ライブデータソースへの接続維持」が失敗する
- Tableau Cloudから仮想接続を作成できない
これは以下ドキュメントの記載におけるユーザーのアクションができないことになります。Tableau Bridgeとしての機能を満たしていませんね。
コンテンツの所有者は Bridge を使用して、Tableau Cloud とプライベート ネットワーク データ間のライブ接続および抽出接続を行います。
逆にドメインやIPアドレスを設定することによって、1~3 の事象が解消します。
これはセキュリティのための機能です。何でもかんでもBridge経由でデータ接続できてしまうことなく、Tableau Cloud側から能動的に接続先を指定できるというものです。
セキュリティ上の理由から、Tableau アクセスを防ぐために、許可リストはデフォルトで空になっています。そのため、サイト管理者は Bridge を使用して Tableau Cloud に送信できるデータを指定することが可能です。
[2]
宛先を指定する方法は様々です。
データソースのエンドポイントのドメインが存在している場合、それを使うのがいいでしょう。Redshift Serverlessの場合、デフォルトのエンドポイントは ${ワークグループ名}.${アカウントID}.${リージョン名}.redshift-serverless.amazonaws.com
なはずです。[3]
このようにドメイン上で複数のデータソースのアクセスを許可したい場合は先頭にアスタリスク記号(*)をつけることでワイルドカード指定できます。
なので、AWSアカウント111122223333
の東京リージョンにおけるRedshift Serverlessワークグループ全体を許可したいという場合は、*.111122223333.ap-northeast-1.redshift-serverless.amazonaws.com
と指定すればいいわけです。
IPアドレスの指定も可能です。CIDR範囲も指定可能なので、特定サブネットにおける複数のDB全体を許可したいという場合にも対応できます。
おさらい
絵にまとめました。このように、Tableau Bridgeを設定するときはTableau Cloudのプール構成だけでは不十分で、ドメイン指定も必要であることにご注意してください。
それでも繋がらない場合
それでも接続ができない場合は他の可能性がありますね。構成時、私が躓いたことを共有します。
- 接続するエンドポイント名にDB名やポート番号が入っていないか?
- Redshiftコンソールからエンドポイント名をそのままコピーした場合、DB名とポート番号が語尾についています。この場合は接続できないのでご注意ください。
- Redshiftコンソールからエンドポイント名をそのままコピーした場合、DB名とポート番号が語尾についています。この場合は接続できないのでご注意ください。
- Tableau BridgeとRedshift Serverlessがネットワークで接続されている状態か?
- その合否は
nslookup
による名前解決とPowershellのTest-NetConnection
ortelnet
だけで十分事足ります。 - 接続ができていないと見られた場合、VPC、ネットワークACL、セキュリティグループを見直してください
-
VPC:同じVPCに存在する場合は大体クリアしています。Transit GatewayやVPCピアリングでTableau Bridgeとデータソースが分離されている場合は、ルートテーブルを見直してください。
-
ネットワークACL:設定を変更していない場合は考慮の必要はありません。もし変更している場合はインバウンド・アウトバウンドと共にトラフィックを許可している必要があります。また、一時ポートとしてRedshift Serverless側のアウトバウンドルールにて、エフェメラルポート[4]の49152~65535を許可している必要があります。
-
セキュリティグループ:おそらくここが本丸でしょう。Tableau BridgeインスタンスとRedshift Serverlessはそれぞれで付与しているサブネット・CIDRを適用することで接続が可能になります。
- ただし、IDの設定方法は、VPCピアリングされていない別VPCでは設定不可能であることはご注意ください。
-
- その合否は
セキュリティグループルール内のセキュリティグループを参照するときは、以下の点に注意してください。
- 両方のセキュリティグループが、同じ VPC、またはピアリングされた VPC に属している必要がある。
- 参照されるセキュリティグループからのルールが、このグループを参照するセキュリティグループに追加されていない。
- インバウンドルールの場合は、セキュリティグループに関連付けられた EC2 インスタンスが、参照されるセキュリティグループに関連付けられた EC2 インスタンスのプライベート IP アドレスからのインバウンドトラフィックを受信できる。
- アウトバウンドルールの場合は、セキュリティグループに関連付けられた EC2 インスタンスが、参照されるセキュリティグループに関連付けられた EC2 インスタンスのプライベート IP アドレスへのアウトバウンドトラフィックを送信できる
-
Tableau関連のアイコン:<a target="_blank" href="https://icons8.com/icon/BQJc3mm8NGYs/tableau-software">タブローソフトウェア</a> アイコン by <a target="_blank" href="https://icons8.com">Icons8</a> ↩︎ ↩︎
-
引用元:https://help.tableau.com/current/online/ja-jp/to_enable_bridge_live_connections.htm#ステップ-3-プールのドメインを指定する の 「注」 ↩︎
-
参考:https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-connecting.html#serverless-connecting-endpoint ↩︎
-
参考:https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/nacl-ephemeral-ports.html ↩︎
Discussion