#はじめに
AWSのEC2で環境構築を行い、RedashからAthenaを使用する際の初期設定周りの話です。
また、Athenaそのものの設定方法やS3へのログの保存方法は記載していません。
大したことは書いていません。強いて言えば、以下くらいでしょうか。他の記事や公式でも同じようなことが言われているかと思います。
- インスタンスサイズは
t2.small
以上 - ユーザー名に注意。
ec2-user
ではなくubuntu
- Redash Staging Pathのバケットにアクセスできるようにポリシーを設定しておくこと
##AMIなど
使用したAMIはami-fde8199b になります。
ちなみにRegionはap-northeast-1
です。
Upgrade前のredashのバージョンは、v2.0.0
です。
最新AMIへのリンクはこちら
#導入
##EC2の作成
作成はマネジメントコンソールから行います。
上記リンクからAMIのページへジャンプし、AWSにログインすれば"ステップ2のインスタンスタイプの選択"が表示されているかと思います。
インスタンスタイプ: t2.small
Public DNS: 自動割り当て
Security Group: インバウンドで22, 80, 443のPortを開けておく(左からSSH、HTTP、HTTPS)。念のため、自分のIPからしかアクセスできない、などにしておいたほうが良いかと思います
IAMロール: Redashには不必要
※VPC関係の設定は割愛します。参考記事があれば追記します。
##インスタンスの起動とSSHログイン
マネジメントコンソールからインスタンスを起動します。
起動できたことを確認できたら、任意のSSHクライアントからSSHログインを行います。
ユーザー名はubuntu
なので注意。ec2-user
ではログインできません。
※pemの設定などは各種クライアントに依存するので、割愛します。
ログイン後、下記の表示がでるかと思います。
*** System restart required ***
とあるように、コンソール等から再起動します。
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-1012-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
*** System restart required ***
ubuntu@ip-xx-xx-xx-xx:~$
##疎通確認
EC2インスタンスのPublic DNSかPublic IPを使って、アクセスします。
アクセスすると、/setup
にリダイレクトされるので、Adminユーザーを登録できることを確認します。
##upgradeして、Redashのバージョンを最新にする
こちらの方法そのままの通りに実行してみます。
cd /opt/redash/current
sudo bin/upgrade
すると、エラーが表示され、最後の行にAttributeError: 'module' object has no attribute 'SSL_ST_INIT'
というのが出力されているはずです。
そして執筆時点では3.0.0.b3134
が最新なので以下のようにコマンドを入力しますが、バージョンの部分は適宜読み替えてください。
cd ../redash.3.0.0.b3134
sudo pip install -r requirements_all_ds.txt
# all_dsのほうだけでいいと思いますが、念のため
sudo pip install -r requirements.txt
そこそこ時間がかかります。
また、上記コマンドについては、下記で説明が記載されています。
https://pip.pypa.io/en/stable/user_guide/?highlight=-r#requirements-files
おわったら再度current
に移動して、upgrade
します
cd ../current
sudo bin/upgrade
##IAMユーザーの作成
RedashからAthenaやS3にアクセスするためのユーザーを作成します。
- マネジメントコンソールからIAMのページを開き、ユーザーの追加を選びます。
- AWSアクセスの種類には、「プログラムによるアクセス」を選択します。
- 次のステップのアクセス権限では、「既存のポリシーを直接アタッチ」を選択し、「ポリシーの作成」をクリックします。(もちろん、あらかじめ作成しておいてもOKです)
- JSONのタブをクリックし、下記にあるjsonを貼り付けます。
-
<redash staging bucket>
は、Redashが実行した結果を出力する場所を指します。このbucketは後ほど使います。 -
<athenaのtableに使ったbucket>
は、任意です。前述したように、Athenaそのものの設定に関わる部分で、その際に使ったbucketを指定してください。
-
- 最後に、ユーザー名等を入力して作成を終えると、アクセスキーIDとシークレットアクセスキーが付与されるので、控えておきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"athena:StartQueryExecution",
"athena:GetNamespace",
"athena:GetQueryResults",
"athena:GetQueryExecutions",
"athena:GetCatalogs",
"athena:ListQueryExecutions",
"athena:GetNamespaces",
"athena:GetExecutionEngine",
"athena:CancelQueryExecution",
"athena:StopQueryExecution",
"athena:GetQueryExecution",
"athena:GetExecutionEngines",
"athena:GetTables",
"athena:GetTable",
"athena:RunQuery",
"athena:BatchGetQueryExecution"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucketMultipartUploads",
"s3:AbortMultipartUpload",
"s3:CreateBucket",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::<redash staging bucket>/*"
]
},
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::<athenaのtableに使ったbucket>/*",
"arn:aws:s3:::<athenaのtableに使ったbucket>/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::<athenaのtableに使ったbucket>",
"arn:aws:s3:::<athenaのtableに使ったbucket>"
]
}
]
}
##Data Sourcesの設定
再びRedashにブラウザからアクセスします。
ログインを行った後、画面右上のほうにある[Data Sources]のアイコンをクリックします。ディスクが重なったようなやつですね。
Settingsが開くので、[+ New Data Source]をクリックします。
- Type: Amazon Athena
- Name: 自由に
- Region: S3のRegion(だと思われます)
- Access Key: アクセスキーID
- Secret Key: シークレットアクセスキー
- S3 Staging Path: s3://
ひとまず必要になるのはこのあたり。
Staging Pathについては、たとえばデフォルトで存在するAmazonAthenaFullAccess
というIAMポリシーを使った場合、Resourceが"arn:aws:s3:::aws-athena-query-results-*"
で固定されています。
これはマネジメントコンソールからAthenaを使った場合のデフォルトの出力先と同様です。
このバケット名を含むオブジェクトの操作ができないと、RedashからAthenaを扱うことができないようです。
※ちなみに自分はここでハマってしまい、あとで行うTest Connectionが成功しませんでした・・・
そして[Save]を行い、Successと表示されたあと、[Test Connection]を実行し、こちらもSuccessと表示されることを確認します。
されない場合は、IAMポリシーかRedashの設定が間違っています。
ここまで行えれば、あとはQueryを投げたりグラフを作れるようになっているかと思います
#その他
##メールの設定を行う
下記の環境変数を追加で指定すればよいですが、REDASH_MAIL_USE_TLS
とREDASH_MAIL_USE_SSL
はdefaultでfalse
となっているものの、空文字列を指定していると"502 Bad gateway"で接続できなくなります。
ただ単にfalse
としたい場合は行自体削除しておくか、コメントアウトしておきましょう。
export REDASH_MAIL_SERVER=""
export REDASH_MAIL_PORT=""
export REDASH_MAIL_USE_TLS=""
export REDASH_MAIL_USE_SSL=""
export REDASH_MAIL_USERNAME=""
export REDASH_MAIL_PASSWORD=""
export REDASH_MAIL_DEFAULT_SENDER=""
export REDASH_HOST="http://ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com"
# もしくは export REDASH_HOST="http://<ipv4 パブリックIP>"
変更後は、sudo service supervisor restart
を実行しておきます。
##日付の表示を変更する
defaultはDD/MM/YYなので、変更することをおすすめします
export REDASH_DATE_FORMAT="YYYY/MM/DD"
変更後は、sudo service supervisor restart
を実行しておきます。
##参考URLなど
https://redash.io/help-onpremise/setup/setting-up-redash-instance.html#aws
https://redash.io/help-onpremise/setup/settings-environment-variables.html