Help us understand the problem. What is going on with this article?

EC2のRedashからAmazon Athenaを使うときに詰まったこととか

More than 1 year has passed since last update.

はじめに

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にアクセスするためのユーザーを作成します。

  1. マネジメントコンソールからIAMのページを開き、ユーザーの追加を選びます。
  2. AWSアクセスの種類には、「プログラムによるアクセス」を選択します。
  3. 次のステップのアクセス権限では、「既存のポリシーを直接アタッチ」を選択し、「ポリシーの作成」をクリックします。(もちろん、あらかじめ作成しておいてもOKです)
  4. JSONのタブをクリックし、下記にあるjsonを貼り付けます。
    • <redash staging bucket> は、Redashが実行した結果を出力する場所を指します。このbucketは後ほど使います。
    • <athenaのtableに使ったbucket> は、任意です。前述したように、Athenaそのものの設定に関わる部分で、その際に使ったbucketを指定してください。
  5. 最後に、ユーザー名等を入力して作成を終えると、アクセスキーIDとシークレットアクセスキーが付与されるので、控えておきます。
IAMポリシー
{
  "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_TLSREDASH_MAIL_USE_SSLはdefaultでfalseとなっているものの、空文字列を指定していると"502 Bad gateway"で接続できなくなります。
ただ単にfalseとしたい場合は行自体削除しておくか、コメントアウトしておきましょう。

/opt/redash/.env
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なので、変更することをおすすめします

/opt/redash/.env
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

ns_k
プログラミングや開発に関係する事柄をQiitaにメモってる https://twitter.com/ns_k_917
https://note.com/nsk917
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした