前置き
HasuraをGCPで構築し、個人開発を円滑に進めたいと思いCloud Run + Cloud SQLの構成でAuth Proxy経由接続する方法があまり見つからなかったのでメモとして残しています
作業手順
- サービスアカウントの作成(Cloud SQL Auth Proxy用)
- Cloud SQLインスタンスの作成(PostgresSQL)
- Docker imageをArtifact ResitoryにPush
- Cloud RunでHasuraを起動
サービスアカウントの作成(Cloud SQL Auth Proxy用)
Cloud SQL Auth Proxy用のサービスアカウントを作成します
作成したサービスアカウントは構築するCloud Runに紐付ける予定です
付与する権限は、『Cloud SQL Client』のみでOK!
Cloud SQLインスタンスの作成(PostgresSQL)
Hasura接続用のDBを構築します
今回は、個人開発用なので最小構成にしています
▼ 構成
種類: PostgresSQL 15.2(デフォルト)
マシン構成: db-g1-small(1vCPU, 1.7GB)
ストレージ: SSD 10GB
Docker imageをArtifact ResitoryにPush
まずは、ArtifactRepositoryにリポジトリを作成します
コンソール画面からポチポチして作成しました
次にローカルにHasuraのDocker Imageをぷるっと
docker pull hasura/graphql-engine:latest
Tagをつけてあげる
docker tag hasura/graphql-engine:latest \
us-central1-docker.pkg.dev/< ProjectID >/< RepositoryName >/< IMAGE >
Pushの前に、なんだか忘れてしまったおまじない
たしかArtifact Registryへ認証を通すおまじない、、、
gcloud auth configure-docker us-central1-docker.pkg.dev
Artifact RegistryへPush
docker push \
us-central1-docker.pkg.dev/< ProjectID >/< RepositoryName >/< IMAGE >
Cloud RunでHasuraを起動
Artifact RepositoryにPushしたイメージからリビジョンを作成します
▼ 構成
ほんとに最小構成で設定しました!
■ 環境変更
HASURA_GRAPHQL_ADMIN_SECRET: Hasuraコンソールにアクセスする時のパスワード
HASURA_GRAPHQL_ENABLE_CONSOLE: Hasuraコンソールにアクセスする場合はTRUEに
HASURA_GRAPHQL_SERVER_PORT: 起動するポート
HASURA_GRAPHQL_DATABASE_URL: DBのURL(Auth Proxy経由で癖があるので詳細を下記に記載)
ポイントは3点!
① 環境変数のCloud SQL Auth Proxy用にセットする
HASURA_GRAPHQL_DATABASE_URLという変数名に、『postgres://<user>:<password>@/<database>?host=/cloudsql/<instance_name>』の形式でセットする
② Cloud SQL接続に作成したDBを選択する
正直、これを選択しないと接続されないかわかりませんが?アイコンをホバーするとProxyを自動化されるとあったので選択しないと接続できないっぽい
③ セキュリティタブからデフォルトサービスアカウントのものから最初に作成したサービスアカウントに選択する
これの選択を忘れるとProxy周りがうまく通らないっぽいので作成したサービスアカウントを設定
デフォルトのサービスアカウントに『Cloud SQL Client』を足していいのかもしれませんが権限を最小限にしたいので最初に作成したものを選択しました
リビジョンの起動が終わったら、発行されたCloud RunのURLからHasuraのコンソール画面へ入る!
環境変数で設定した、HASURA_GRAPHQL_ADMIN_SECRETでログインできれば成功 🎉
おしまい
イメージをそのままCloud Runで動かすだけであればすごい簡単にHasuraを構築することができました!
Hasuraは、コード管理できるのでプロダクトで使う場合はコード管理するした方がリリースタイミングでHasuraコンソールからポチポチするより良さそう!(どうやるかは全然イメージわかないですが、、、)
あとは、『HASURA_GRAPHQL_ADMIN_SECRET』と『HASURA_GRAPHQL_DATABASE_URL』をSecretManagerとかで管理して、リブジョンする際に参照するように設定すれば一通り良さそう!!
最後まで読んでいただきましてありがとうございます 🙇♂️