これは何
Secrets Manager に RDS の接続情報を保存する際、 JSON 形式で保存されますが、Fargate は Secrets Manager から JSON キーを指定しての取り出しに対応していない(まだ対応されていない様子だった)ため、 jq
コマンドを持ったコンテナイメージを作って実行時に動的に HASURA_GRAPHQL_DATABASE_URL
にマッピングしていました。
使わなくなって消すのももったいないので残しておきます。
RDS のパスワードをローテーションする場合に使えるかもしれません。
# Dockerfile FROM stedolan/jq as jq FROM hasura/graphql-engine:v1.2.2 COPY --from=jq /usr/local/bin/jq /usr/local/bin/jq COPY docker-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["docker-entrypoint.sh"] CMD ["graphql-engine", "serve"]
# docker-entrypoint.sh #!/bin/sh if [ -z ${HASURA_GRAPHQL_DATABASE_URL+x} ]; then export HASURA_GRAPHQL_DATABASE_URL=$(echo $DB_SECRET | jq -r '"postgres://" + .username + ":" + (.password|@uri) + "@" + .host + ":" + (.port|tostring) + "/" + .dbname') fi exec "$@"
password
には記号が入る可能性があるので .password|@uri
をつかってエスケープしています。
現在は
この方法はやめてシンプルに Secrets Manager に別途 Secret String 形式で RDS への接続 URL を保存してしまっています。
コンテナイメージは普通の hasura/graphql-engine
を使っています。
はじめはローカルや CI/CD 環境からから Admin Secret を持ってマイグレーションを叩きに行くよりもセキュリティ的にいいだろうと思い cli-migrations
版のイメージをベースにマイグレーションファイルを COPY してコンテナイメージを生成していたのですが、毎回コンテナをデプロイしていると結構時間がかかってしまっていたため、今は諦めて外からマイグレーションしています。