やったこと
- Redashをローカル環境のDockerで起動する
- ローカル環境(Dockerホスト)でリッスンしているMySQLへ接続する
- Amazon Athenaへ接続する
TL;DR
とにかくRedashをDockerで起動してみたいんだけど、どうしたらいいの? (これだけだとAmazon Athenaは使えません)
- 作業ディレクトリを作って、そこへ移動する
- 下にある
docker-compose.yml
ファイルをコピーして、そのディレクトリへ配置する -
docker-compose run --rm server create_db
する -
docker-compose up -d
する -
http://localhost:28080
へアクセスする
前提
Docker for Mac をインストール済みの前提。他のOSでもdocker環境が構築済みなら、たぶん問題なく動くと思う。
試した環境は下記の通り。
- macOS Sierra 10.12.3
- Docker version 1.13.1
- docker-compose version 1.11.1
起動
redashディレクトリを作成して、その下にリポジトリをcloneする。Amazon Athenaを使いたいのでそのためのリポジトリもクローンしている。こんな感じの構成にする。
redash/
`-- https://github.com/getredash/redash.git (v1.0.0-rc.2)
`-- https://github.com/getredash/redash-amazon-athena-proxy.git (95a9850)
`-- docker-compose.yml (作成)
redashリポジトリの docker-compose.production.yml
をコピーして docker-compose.yml
を作り、変更する。(今回redashリポジトリで必要なのはこのymlファイルだけ)
主な変更点:
- redashのイメージをbuildするようになっていたが、Docker Hub:redash/redashにイメージが上がっているのでimageを指定
- ホスト側のポートは重複があるようなら変更
- スキーマキャッシュの時間を5分に
- 日付フォーマットを指定
- Amazon Athenaを使うためにproxyサービスの追加・環境変数の追加
- Postgresのデータを保存するvolumeは名前付きボリュームに
- ゲートウェイのアドレスを固定するためにネットワーク設定をする(ゲートウェイへ接続するとホストに接続できる)
結果的にこんな感じになった。
version: '2'
services:
server:
image: redash/redash:1.0.0.b2804
command: server
depends_on:
- postgres
- redis
ports:
- "5000:5000"
environment:
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: "INFO"
REDASH_REDIS_URL: "redis://redis:6379/0"
REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
REDASH_COOKIE_SECRET: veryverysecret
REDASH_SCHEMAS_REFRESH_SCHEDULE: 5
REDASH_DATE_FORMAT: YYYY/MM/DD
# for Amazon Athena
# REDASH_ADDITIONAL_QUERY_RUNNERS: redash.query_runner.athena
# ATHENA_PROXY_URL: http://redash-amazon-athena-proxy:4567/query
worker:
image: redash/redash:1.0.0.b2804
command: scheduler
environment:
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: "INFO"
REDASH_REDIS_URL: "redis://redis:6379/0"
REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
QUEUES: "queries,scheduled_queries,celery"
WORKERS_COUNT: 2
REDASH_SCHEMAS_REFRESH_SCHEDULE: 5
REDASH_DATE_FORMAT: YYYY/MM/DD
# for Amazon Athena
# REDASH_ADDITIONAL_QUERY_RUNNERS: redash.query_runner.athena
# ATHENA_PROXY_URL: http://redash-amazon-athena-proxy:4567/query
redis:
image: redis:2.8
postgres:
image: postgres:9.3
volumes:
- postgres-data:/var/lib/postgresql/data
nginx:
image: redash/nginx:latest
ports:
- "28080:80"
depends_on:
- server
links:
- server:redash
# for Amazon Athena
# redash-amazon-athena-proxy:
# build: redash-amazon-athena-proxy
volumes:
postgres-data: {}
networks:
default:
ipam:
config:
- subnet: 172.31.0.0/16
gateway: 172.31.0.1
こうしておいて下記のコマンドを順に実行すると、Redashが起動する。
docker-compose run --rm server create_db
docker-compose up -d
ホスト側のポート28080をwebサーバに割り当てているので、下記URLへアクセスするとRedashの初期画面が開く。
http://localhost:28080
Amazon Athenaへ接続できるようにする
Javaプロキシを立てて接続する方式になっている。上記ymlファイルで # for Amazon Athena
とコメントアウトしているところをコメント解除するとAmazon Athenaが使えるようになる。(コメント解除後に再度 docker-compose up -d
が必要)
参考にした情報
クエリランナーの有効化の方法とプロキシのURLがわからなくて苦労したので、辿ったファイルをメモしておく。
公式ブログ:
redashリポジトリ:
- https://github.com/getredash/redash/blob/v1.0.0-rc.2/redash/query_runner/athena.py
- https://github.com/getredash/redash/blob/v1.0.0-rc.2/redash/query_runner/__init__.py#L169
- https://github.com/getredash/redash/blob/v1.0.0-rc.2/redash/__init__.py#L66
- https://github.com/getredash/redash/blob/v1.0.0-rc.2/redash/settings.py#L195
redash-amazon-athena-proxyリポジトリ:
接続設定(データソースの作成)
次の迷いポイントは接続設定だと思う。
MySQL
ホスト側でリッスンしているMySQLに接続するには、dockerネットワークのゲートウェイを指定する。
Host: 172.31.0.1
他はMySQLの設定に準ずる。
Amazon Athena
Amazon AthenaのテーブルはAWSコンソールなりで別途作成する必要がある。(事前に作成してなくても、接続自体は可能)
Redash側の設定に必要なもの:
- AWSのアクセスキーID
- AWSのシークレットアクセスキー
- 利用するリージョン
- Amazon Athena用stagingバケット
破棄
起動したRedashを停止するには、
docker-compose down
Postgresに保存したデータを含めて削除するには、
docker-compose down --volumes