TableauからAthenaにIAMロールで接続するためJDBC利用してみる

最初に

TableauからAthenaに繋ぐウィザードを立ち上げると、Access KeyとSecret Access Keyを求められます。

やはりロールで繋ぎたいよなと考えていたところ、GCPのSpannerにはJDBC接続できたことを思い出し、Athenaも同じことできるのでは?とやってみたらできました。

yomon.hatenablog.com

前提

Athenaで対象のデータをクエリする権限を持ったIAMロールがアタッチされたEC2インスタンスにTableauがインストールされている前提で作業します。

AthenaのStream APIは444ポートを使うので、その点も要注意です。

画面はWindowsでキャプチャしています。

設定

JDBCドライバを以下からダウンロードします。

https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html

ダウンロードしたJDBCドライバのjarファイルはOS毎に以下のパスに置きます。

OS Path
Windows C:\Program Files\Tableau\Drivers
Mac ~/Library/Tableau/Drivers
Linux /opt/tableau/tableau_driver/jdbc

TDCファイル作成(Tableau Datasource Customizatio)

以下のようなTDCファイルを作成します。

<connection-customization class='genericjdbc' version='10.00' enabled='true'>
  <vendor name='genericjdbc' />
  <driver name='awsathena' />
  <customizations>
    <customization name='CAP_JDBC_SUPPRESS_ENUMERATE_DATABASES' value='yes' />
    <customization name='CAP_JDBC_SUPPRESS_ENUMERATE_SCHEMAS' value='yes' />
    <customization name='CAP_JDBC_SUPPRESS_EMPTY_CATALOG_NAME' value='yes' />
  </customizations>
</connection-customization>

ソフトウェア毎に以下の場所に配置します。

Tableau Path
Tableau Desktop Documents\My Tableau Repository\Datasources
Tableau Server(Windows) ProgramData\Tableau\Tableau Server\data\tabsvc\vizqlserver\Datasources
Tableau Server(Linux) /var/opt/tableau/tableau_server/data/tabsvc/vizqlserver/Datasources

配置したら、Tableauを再起動します。

JDBC接続文字列作成

以下のパラメータで作成してみます。

パラメータ
AwsRegion ap-northeast-1
S3OutputLocation s3://otomo-tmp/
Workgroup primary
AwsCredentialsProviderClass com.simba.athena.amazonaws.auth.DefaultAWSCredentialsProviderChain

詳細はこちらのPDF参考にしてください。

上記のパラメータでできた接続文字列が以下になります。

jdbc:awsathena://ap-northeast-1.amazonaws.com:443;AwsRegion=ap-northeast-1;S3OutputLocation=s3://otomo-tmp/;Workgroup=primary;AwsCredentialsProviderClass=com.simba.athena.amazonaws.auth.DefaultAWSCredentialsProviderChain

TableauからAthenaに接続してみる

データソースにOther Databases (JDBC)を選択してURLに上記の接続文字列を入れます。 Dialectに SQL92 を選択します。 他は空欄のままSign Inをクリックします。

データがクエリできていることが確認できました。