EC2にTableau Server(linux)をインストールして、Redshiftに接続してみる

## はじめに
以前構築を進めたときに苦戦したので、備忘録として記事を作成しました。
今回インストールするTableau Server on Linux(2022.3.2)は現在インストールできなくなっています。他バージョンでの挙動は確認していないため、同様の手順で構築できない可能性があります。
構築のヒントとして、ご参考程度にとどめていただけますと幸いです。


## EC2を準備する
今回はEC2にTableau Server on Linux(2022.3.2)をインストールします。
EC2はパブリックサブネットに作成します。

### EC2要件
■インスタンス種別について
Tableau公式サイトに典型的なインスタンス種別とサイズとして以下が紹介されています。
https://help.tableau.com/current/server-linux/ja-jp/ts_aws_virtual_machine_selection.htm

　・c5.4xlarge (開発環境)
　・m5.4xlarge (開発環境またはテスト環境)
　・r5.4xlarge (開発環境、テスト環境、または本番環境)


今回は検証環境であるため、c5.4xlargeを選択したいところですが、2022.3以降のTableauバージョンではハードウェアの最小要件を満たしておらず、EC2にTableau Serverをインストールできません。
そのため、今回は「m5.4xlarge」を選択します。


Tableauの最小要件は公式サイトの以下のページからご確認ください。
https://help.tableau.com/current/server-linux/ja-jp/server_hardware_min.htm

■OSについて
今回は「Amazon Linux2」としました。

■ストレージについて
以下のように設定しました。
ルートボリューム　50GiB
EBSボリューム　100GiB


## EC2にTableau Serverをインストールする
EC2を起動したら、公式サイトの手順を参考にインストールしていきます。
特に追記事項はないため、詳細な手順は割愛します。

https://help.tableau.com/current/server-linux/ja-jp/install_config_top.htm


Tableau Server のライセンス認証と登録を行う際に、TSM Webインスタンスを使用する場合があります。
こういったときに画面が見えないと不便なので、EC2にGUIをインストールします。
今回はTigerVNCをインストールしました。

手順はAWSの情報センターにある記事を参考にしました。
https://repost.aws/ja/knowledge-center/ec2-linux-2-install-gui

Tableau Serverの管理者アカウント作成まで完了したら、Redshiftの準備を行います。


## Redshiftを準備する
今回はEC2と同様のVPCにあるプライベートサブネットにRedshiftを構築していきます。

### 事前準備
サブネットグループとセキュリティグループを作成します。

#### サブネットグループの作成
Redshiftコンソールの左タブから[サブネットグループ]を選択し、[クラスターサブネットグループを作成]をクリックします。

[サブネットを追加]の欄で、対象となるプライベートサブネットを選択します。


#### セキュリティグループの作成
EC2コンソールの左タブから[セキュリティグループ]を選択し、[セキュリティグループを作成]をクリックします。

[インバウンドルール]にEC2が配置されているパブリックサブネットのIPアドレスを追加します。
以下、入力内容です。

　[タイプ]Redshift
　[プロトコル]TCP
　[ポート範囲]5439
　[ソース]マイIP xxx.xxx.xxx.xxx/xx <同VPC上パブリックサブネットのIPアドレス>
 
 また、TableauがインストールされているEC2も追加します。
  [タイプ]Redshift
　[プロトコル]TCP
　[ポート範囲]5439
　[ソース]マイIP xxx.xxx.xxx.xxx/xx <同VPC上EC2のIPアドレス>

[アウトバウンドルール]もデフォルトのままにします。
　[タイプ]すべてのトラフィック
　[プロトコル]すべて
　[ポート範囲]すべて
　[ソース]カスタム 0.0.0.0/0

### IAMロールの作成
IAMマネジメントコンソールから[ロールの作成]をクリックします。
　AWSサービス>Redshift>Redshift - Customizable>S3ReadOnlyPolicy
の順で選択していき、IAMロールを作成します。

### Redshiftクラスターの作成
Redshiftコンソールから[クラスターを作成]をクリックします。

#### クラスター設定
用途に合わせて設定してください。今回は検証用に以下を設定しました。
　[本番稼働]
　[ノードの種類]dc2.large
　[ノードの数]1

#### データベース設定
以下の設定はtableau接続時に必要となるため、忘れないようご注意ください
　[データベース名] <ご自身で設定>
　[データベースポート] 5439
　[マスターユーザー名] <ご自身で設定>
　[マスターユーザーのパスワード] <ご自身で設定>

#### クラスターのアクセス許可
 　[使用可能なIAMロール]<先ほど作成したIAMポリシーを選択>

#### 追加設定
[デフォルトを使用]を外します。
　[VPC] < EC2と同じVPC>
　[VPCセキュリティグループ] <上記で設定したセキュリティグループ>
　[クラスターサブネット] <上記で設定したクラスターサブネット>
　[アベイラビリティゾーン] <ご自身の場所で選択>
  [拡張されたVPCルーティング] 無効化
  [パブリックアクセス可能] 無効化

上記設定でクラスターを作成します。

## Tableau ServerにRedshiftのODBCドライバをインストールする
linuxでのドライバインストール時には**ユーザに注意してください。**
TSM管理者ユーザでログイン後、インストール作業を行います。
私はここで長時間躓きました。

それでは、ODBCドライバをインストールしていきます。
Tableauの公式サイトにデータベースドライバのダウンロードページがあります。

https://www.tableau.com/ja-jp/support/drivers?_gl=1*ry1tvd*_ga*MTU2NDQxNzE5OC4xNjc1NzUyMTgw*_ga_8YLN0SNXVS*MTcwMzQzMjA3My41LjEuMTcwMzQzMjA4NC4wLjAuMA..&_ga=2.182789217.674579248.1703423559-1564417198.1675752180

が、結局AWSのODBCの構成ページへ飛ばされてしまいます。
https://docs.aws.amazon.com/redshift/latest/mgmt/configure-odbc-connection.html#install-odbc-driver-linux



以下、ドライバインストール手順となります。
AWSのページから、対象ドライバをダウンロードし、yumインストールします。

```
yum --nogpgcheck localinstall <RPMFileName>
```

環境変数を追加します。
```:~/.bashrc
export ODBCINI=/usr/local/odbc/odbc.ini
export ODBCSYSINI=/usr/local/odbc
export AMAZONREDSHIFTODBCINI=/etc/amazon.redshiftodbc.ini
```

※これでもドライバが認識されない方は以下のTableauコミュニティページが参考になるかもしれません。
https://community.tableau.com/s/question/0D54T00000C5RQbSAN/amazon-redshift-driver-issue-linux-on-aws

odbcinst.iniファイル内の記載を
[Amazon Redshift (x64)]」から「[Amazon Redshift Unicode]へ変更すると、認識するかもしれません。

```:odbcinst.ini
[ODBC Drivers]
Amazon Redshift Unicode=Installed

[Amazon Redshift Unicode]
Description=Amazon Redshift ODBC Driver(64-bit)
Driver=/opt/amazon/redshiftodbc/lib/64/libamazonredshiftodbc64.so
```

```:obdc.ini
[ODBC]
Trace=no

[ODBC Data Sources]
Amazon Redshift DSN 64=Amazon Redshift Unicode

[Amazon Redshift DSN 64]
# This key is not necessary and is only to give a description of the data source.
Description=Amazon Redshift ODBC Driver (64-bit) DSN

# Driver: The location where the ODBC driver is installed to.
Driver=/opt/amazon/redshiftodbc/lib/64/libamazonredshiftodbc64.so

# Required: These values can also be specified in the connection string.
Server=datadriven-redshift-cluster-v2.c43f7hgzulep.ap-northeast-1.redshift.amazonaws.com
Port=5439
Database=<設定したもの>
locale=ja_JP.utf8
#UID=<設定したもの>
```

## TableauからRedshiftへ接続
公式サイトの手順をもとに進めます。
https://help.tableau.com/current/pro/desktop/ja-jp/examples_amazonredshift.htm

事前にRedshiftクラスタを起動しておきます。
http/httpsでご自身のTableau serverをブラウザで起動します。

ログイン後、
[個人用スペース]>[ワークブックの作成]>[データに接続]>[コネクタ]>[AmazonRedshift]
の順に選択します。

あとはクラスタ情報を入力すると、、、

無事接続完了です！