[Advent Calendar 2021][Day10]HasuraGraphQLをCloud Runにデプロイする

はじめに

Advent Calendar 2021のDay10。 今回は、HasuraGraphQLをCloud Runにデプロイします。

Hasura GraphQLのDockerfileを作る

Day6で出力したMetadata,Migrationデータを使って、ローカルで作成したHasuraをCloud Runで再現できるようDockerfileを作成します。

  • hasura/Dockerfile
FROM hasura/graphql-engine:v2.0.10.cli-migrations-v3
COPY metadata /hasura-metadata
COPY migrations /hasura-migrations

HasuraのCI/CDについて詳しくは、下記を参照すると良いと思います。

参考

https://hasura.io/docs/latest/graphql/core/migrations/index.html

https://hasura.io/docs/latest/graphql/core/hasura-cli/config-reference.html#environment-variables

Hasura GraphQLのコンテナイメージをビルドする

cd hasura
# これは、root権限になっていると後続のDockerビルドに失敗するので・・・
sudo chown -R $USER db_data/
docker build -t hasura-graphql .

Artifact Registryを設定する

Artifact Registry

初回アクセスするとAPIの有効化が求められるので、有効化します。

Dockerリポジトリを作成する

コンソールから下記のように入力してDockerリポジトリを作成します。

Artifact Registry作成

Artifact Registryの詳しくは、下記を参照すると良いと思います。

参考

https://cloud.google.com/artifact-registry/docs/docker/quickstart

Hasura GraphQLのコンテナイメージをArtifact RegistryにPushする

作成したArtifact RegistryのURLでビルドしたイメージをタグ付けしてから、Pushします。

docker tag hasura-graphql asia-northeast1-docker.pkg.dev/cloudandbuild-advent-calendar/advent-calendar/hasura-graphql:latest
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
docker push asia-northeast1-docker.pkg.dev/cloudandbuild-advent-calendar/advent-calendar/hasura-graphql

Hasura GraphQLをCloud Runにデプロイする

Cloud Run

今回は、事前にビルドしたコンテナをデプロイするので、下記のクイックスタートを参考にデプロイします。

クイックスタート: 事前にビルドされたサンプル コンテナをデプロイする

参考

https://cloud.google.com/run/docs/quickstarts/prebuilt-deploy

デプロイ例

環境変数

DBのHostは、GCPのプロジェクトやインスタンス名に応じて変更します。

varvalue
HASURA_GRAPHQL_DATABASE_URLpostgres://:@/?host=/cloudsql/<instance_name>
具体的な値: postgres://postgres:<password>@/postgres?host=/cloudsql/cloudandbuild-advent-calendar:asia-northeast1:advent-calendar
HASURA_GRAPHQL_ENABLE_CONSOLEtrue
HASURA_GRAPHQL_DEV_MODEtrue
HASURA_GRAPHQL_ADMIN_SECRET<password>

Hasura起動時にMigrateを実施してくれるので、ローカルで作ったDBスキーマやHasuraのメタデータが適用された状態で使い始めることが出来ます。

最後に不要になったら、CloudRunのインスタンスの削除、CloudSQLの停止をしておきます。

まとめ

今回は、HasuraGraphQLをCloud Runにデプロイしました。 次回は、Nuxt3をCloud Runにデプロイしていきます。