AMIから起動したredashでメタデータにアクセスする手順の話(2020/04/03現在)
はじめに
redashのユーザー情報やクエリなどredash上で保存したデータはメタデータとしてDBに保存されている
少し苦戦したので、redashのDBにアクセスするまでの手順を備忘録として残す
DB情報の確認
redashはアプリケーションサーバ以外に、キャッシュとしてredisやDBとしてPostgreを利用している
docker-composeで一括起動しているので、再起動時などもdocker-composeを利用する
$ cat /opt/redash/docker-compose.yml version: "2" ・ ・ ・ postgres: image: postgres:9.6-alpine env_file: /opt/redash/env volumes: - /opt/redash/postgres-data:/var/lib/postgresql/data restart: always ports: - "5432:5432" ・ ・ ・
DBの接続情報は、ここで設定されている /opt/redash/env
に記載されているので確認しておきましょう
$ cat /opt/redash/env | grep -i postgres POSTGRES_PASSWORD=hogehogepassword REDASH_DATABASE_URL=postgresql://postgres:hogehogepassword@postgres/postgres
パスワードは書き換えていますが、 接続情報からユーザーが postgres
でデータベースとして postgres
となっていることも確認できます
DB接続情報の確認
redashの管理画面から接続する前にredashのインスタンス上で接続の確認を行います
psqlのクライアントが入っていないので、インストールから行います
# psql clientのインストール $ sudo apt-get install postgresql-client # バージョンの確認 $ psql --version psql (PostgreSQL) 12.2 (Ubuntu 12.2-2.pgdg18.04+1)
続いて、先程の接続情報を使ってDBにログインしたいところですが、postgresへのポートが開放されていないので、空ける必要があります
# dockerのポート情報の確認 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES adhoc_worker: e3be4ab3f1c8 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 7 days ago Up 7 days 0.0.0.0:5000->5000/tcp redash_server_1 6bf3b713d5fe postgres:9.6-alpine "docker-entrypoint.s…" 7 days ago Up 7 days 5432/tcp redash_postgres_1 a4edc7fb36d0 redash/nginx:latest "nginx -g 'daemon of…" 7 days ago Up 7 days 0.0.0.0:80->80/tcp, 443/tcp redash_nginx_1 2b39a6838a0c redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 7 days ago Up 7 days 5000/tcp redash_adhoc_worker_1 2ff4aed21f34 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 7 days ago Up 7 days 5000/tcp redash_scheduled_worker_1 e9a4a49963e3 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 7 days ago Up 7 days 5000/tcp redash_scheduler_1 bc73e56ac9a2 redis:5.0-alpine "docker-entrypoint.s…" 5 months ago Up 7 days 6379/tcp redash_redis_1
アプリケーションサーバーとnginxしかポートが開放されていないことがわかりますね
postgresのポート開放
docker-compose.ymlを修正して、ports情報を追記します
$ diff -u docker-compose.yml.bk docker-compose.yml --- docker-compose.yml.bk 2020-04-03 06:23:44.332535841 +0000 +++ docker-compose.yml 2020-04-03 04:50:14.879865025 +0000 @@ -41,6 +41,8 @@ volumes: - /opt/redash/postgres-data:/var/lib/postgresql/data restart: always + ports: + - "5432:5432" nginx: image: redash/nginx:latest ports:
設定を変更したので、反映させます
$ sudo docker-compose up -d postgres Recreating redash_postgres_1 ... error ERROR: for redash_postgres_1 Cannot start service postgres: b'driver failed programming external connectivity on endpoint redash_postgres_1 (2750c3aca436769be5b99682533d389bca070a999f70399ec00c43ff704e0a40): Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use' ERROR: for postgres Cannot start service postgres: b'driver failed programming external connectivity on endpoint redash_postgres_1 (2750c3aca436769be5b99682533d389bca070a999f70399ec00c43ff704e0a40): Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use' ERROR: Encountered errors while bringing up the project.
自分の環境では、portの設定反映だけでは正常に動作しなかったので、該当のpsqlのプロセスを落として、再起動しました
# 5432をbindingしているプロセスを探す $ sudo lsof -i:5432 -nP COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME postgres 8403 postgres 5u IPv4 1161102 0t0 TCP 127.0.0.1:5432 (LISTEN) # 該当プロセスのkill sudo kill 8403 # postgresの起動 $ sudo docker-compose up -d postgres Removing redash_postgres_1 Recreating 6bf3b713d5fe_redash_postgres_1 ... done
再度dockerのポート情報を確認すると空いているのがわかりますね
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e3370b9ddb6d postgres:9.6-alpine "docker-entrypoint.s…" 11 seconds ago Up 6 seconds 0.0.0.0:5432->5432/tcp redash_postgres_1 e3be4ab3f1c8 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 7 days ago Up 7 days 0.0.0.0:5000->5000/tcp redash_server_1 a4edc7fb36d0 redash/nginx:latest "nginx -g 'daemon of…" 7 days ago Up 7 days 0.0.0.0:80->80/tcp, 443/tcp redash_nginx_1 2b39a6838a0c redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 7 days ago Up 7 days 5000/tcp redash_adhoc_worker_1 2ff4aed21f34 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 7 days ago Up 7 days 5000/tcp redash_scheduled_worker_1 e9a4a49963e3 redash/redash:8.0.0.b32245 "/app/bin/docker-ent…" 7 days ago Up 7 days 5000/tcp redash_scheduler_1 bc73e56ac9a2 redis:5.0-alpine "docker-entrypoint.s…" 5 months ago Up 7 days 6379/tcp redash_redis_1
DBに接続
localから接続できるようになったので、接続してテーブル情報の確認をします
$ psql -U postgres -h localhost Password for user postgres: psql (12.2 (Ubuntu 12.2-2.pgdg18.04+1), server 9.6.15) Type "help" for help. postgres=# \d
redashからメタデータのDBにアクセス
redashの管理画面のDataSourceを追加する
注意すべき点として、同じインスタンス内だがHostがlocalhostや127.0.0.1で接続できなかった
そこでインスタンスのprivate-ipを指定することによって接続することができた
IPが変わるような環境であれば、DNSを作成して指定すると良いかも知れない
上記の設定を行って、Test Connectionが正常に動作すれば、対応完了
まとめ
AMIでredashを起動した際に生成されるローカルのデータベースにアクセスする手順をまとめた。
バージョンが変わると接続方法も変わるかも知れないが、一時的な備忘録としてここに記した