【Hasura】CloudBuildでMetadataを反映させてみた
こんにちは、フリーランスエンジニアの太田雅昭です。
HasuraのMetadata
みんな大好きHasuraですが、Metadataの移行で色々つまづいたので書かせていただきます。Metadataは、DBと直接関係のないHasura特有の情報で、パーミッションなどが含まれています。
なお大まかな手順は以下になります。
- ローカル環境でMetadataをダウンロード
- MetadataをGithubにアップロード
- CloudBuildで対象のHasuraに反映
一つ一つ見ていきます。
Metadataをダウンロード
Metadataをダウンロードするには、まずcliを入れます。
yarn global add hasura-cli
初期化します。
hasura init
続いてMetadataをダウンロードします。exportを使います。
unset NODE_OPTIONS
hasura metadata export
ここでunset NODE_OPTIONSとしているのは、エラー回避のためです。実行環境によるのかもしれませんが、少なくとも私の環境ではこのようにしないと、エラーで動きませんでした。
上記を実行すると複数のファイルが作成されるので、Githubにアップロードします。
Cloud Buildで反映させる
続いてCloud Buildで反映させます。今回は以下のようにしました。
# _HASURA_ENDPOINT: Endpoint of Hasura
steps:
- name: 'node'
entrypoint: 'bash'
args:
- '-c'
- |
npm install -g hasura-cli && \
cd ./packages/hasura/cli && \
hasura metadata apply --endpoint $_HASURA_ENDPOINT --admin-secret $$HASURA_ADMIN_SECRET
secretEnv: ['HASURA_ADMIN_SECRET']
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/HASURA_ADMIN_SECRET/versions/latest
env: 'HASURA_ADMIN_SECRET'
options:
logging: CLOUD_LOGGING_ONLY
node環境でhasura-cliをインストールし、先ほどmetadataを作成したディレクトリまで移動。その後applyコマンドで実行しています。なおHASURA_ADMIN_SECRETはGCPのシークレットマネージャーを利用しています。
注意:DATABASE_URLについて
HasuraのMetadataには、接続先のデータベース情報も含まれています。そのため以下の場合、泣きをみることになります。
— コンソールで直接DATABASE_URLを指定している —
この場合、そのURLがそのまま反映されてしまうため、ローカルで使用していたDBを参照しようとして接続できなくなります。そのため、ちゃんと環境変数から参照するように設定する必要があります。今回はこれで泣かされました。以上です。
小話
最近少し体調が良くなりました。少し睡眠時間を削っていけそうです。