りんごとバナナとエンジニア

エンジニア修行の記録

AWS上でRedashを動かす

普段業務でお世話になっているRedash。個人ではローカルで動かしたことはあるが、せっかくなのでちゃんとした環境に立ち上げてみたいと思った。

EC2インスタンスを作成

まずRedash用のVPCを作り、その中にEC2インスタンスを立ち上げる。 Redash公式サイトでAMIが配布されているので、そこから直接EC2インスタンスを立ち上げることができる。デフォルトではインスタンスt2.micro になっているが、これだと動作が重いため、 t2.small に変えるのがおすすめ。

redash.io

このRedash用EC2インスタンスには、開発用にSSH接続できるようにしておくのと、Redashを使うために自分のブラウザからアクセスできるようにする必要がある。このため、EC2作成時に「自動割り当てパブリックIPを割り当て」を有効にしておくのと、IGWを作成してEC2インスタンスがあるサブネットをルートテーブルに追加しておくのを忘れてはいけない。またセキュリティグループは、あくまで開発用であることを考慮し、アクセス元を自分のIPアドレスのみにしておくとよいだろう。

RDSインスタンスを作成

次にRDSインスタンスを作成する。今回は業務用のRedash同様にMySQLを選んだ。
ポイントは、Redash用インスタンスからMySQLを叩けるようにするために、RDSのセキュリティグループにRedash用EC2インスタンスのプライベートIPアドレスを追加すること。EC2とRDSを同じVPC上に立てていれば、プライベートIPアドレスをセキュリティグループに追加することでリクエストを飛ばせるようになる。

RDSにデータ投入

地味に面倒なのが、Redash用のデータを用意すること。今回は、以前使ったことがあるredash-hands-onからデータをいただくことにした。

github.com

docker-compose.yml を覗くと、 kakakakakku/mysql-world-database:5.7 というdockerイメージがある。このイメージをローカルで起動させれば、MySQLからデータをエクスポートできるようになる。

docker run --env MYSQL_ALLOW_EMPTY_PASSWORD=yes --env TZ=Japan -p 3306:3306 kakakakakku/mysql-world-database:5.7

あとはこのデータをRDSに投入する必要がある。横着な方法がないか探したのだが、まとまったデータ移行の際は素直にデータ投入用のEC2インスタンスを立てるやり方が推奨されているようだ。

docs.aws.amazon.com

そこでRedash用VPCにもうひとつEC2インスタンスを立てる。データ投入用の仮のものなので、こちらは t2.micro で良いだろう。このインスタンスのプライベートIPアドレスをRDSのセキュリティグループに追加するのも忘れずに行う。

データ投入用のEC2インスタンスに接続できたら、mysqlクライアントをインストールし、データのインポートを行う。今回はRedashのAMIに合わせてEC2インスタンスUbuntuを使ったため、初期ユーザ名が ubuntu になっている。

$ scp -i <path_to_pem_file> mysql-world-database.sql ubuntu@<EC2 public ipv4 address>:/home/ubuntu/
$ ssh -i <path_to_pem_file> ubuntu@<EC2 public ipv4 address>

# on EC2
$ sudo apt update
$ sudo apt install mysql-client
$ mysql -u root -h <rds_host> -p -e 'CREATE DATABASE redash;'
$ mysql  -u root -h <rds_host> redash -p < mysql-world-database.sql

redash用のmysqlユーザも作っておく。データの閲覧・集計をするだけのツールなので、権限は当該データベースへのSELECT権限のみで良い。また、今後インスタンスを移行する場合のことも考え、権限は 10.0.% に対して与えておいたが、ユーザも 10.0.% にしても良かったかもしれない。

# on EC2
$ mysql -u root -h <rds_host> -p

> CREATE USER 'redash'@'10.0.1.100' IDENTIFIED BY 'xxxxx';
> GRANT SELECT ON redash.* TO 'redash'@'10.0.%';

Redashにアクセスする

準備が整ったら、ブラウザからRedashにアクセスできる。専用のDNSはまだ取得していないが、EC2インスタンスの設定画面にある「Public DNS (IPv4)」に記載されたURLを入れれば接続できる。なお、このPublic DNSには自動で割り当てられたIPアドレスの文字列が含まれているため、インスタンスを再起動すると値も変わってしまう。常に同じにしておきたければ、Redash用EC2インスタンスにElastic IPをアタッチしておく必要がある。

f:id:Udomomo:20200426155550p:plain

Redashにアクセスしてadminアカウントを作り、データベースの接続情報を登録すれば、Redashを使えるようになる。無事にRedash上からクエリを投げることができた。