php:7.4-apache ベースに Laravel v6 を乗せたコンテナを GitHub Actions で Cloud Run にデプロイして Cloud SQL 接続までを確認してみました。

主に GCP のドキュメントに対する補足的な内容です。MySQL第2世代インスタンスを使用して確認しています。

https://cloud.google.com/sql/docs/mysql/connect-run について

Cloud SQL for MySQL インスタンスを作成します。

特別な設定は必要ありませんでした。 パブリック IP が有効になってさえいればOKのようです。

[インスタンスの詳細] ページでインスタンスの INSTANCE_CONNECTION_NAME を探します。

PROJECT_ID:REGION:INSTANCE_ID 形式です。インスタンスIDとは異なります。

まだ Cloud SQL Admin API を有効にしていない場合は有効にします。

Cloud SQL Admin API の他に Cloud SQL も有効にする必要がありました。

Cloud SQL Admin API が無効の場合のエラー

API [sqladmin.googleapis.com] not enabled on project

Cloud SQL が無効の場合のエラー

API [sql-component.googleapis.com] not enabled on project

後述のコマンドを使用する前に、次のように置き換えます。

--set-env-vars INSTANCE-CONNECTION-NAME="INSTANCE-CONNECTION-NAME" と記載されていますが --add-cloudsql-instances INSTANCE-CONNECTION-NAME のみでOKでした。

サービスのサービス アカウントに次の IAM 役割のいずれかがあることを確認します。

確認時に使用したデフォルトのサービスアカウントが 編集者Cloud SQL クライアント を含んでいるようで、特にすることはありませんでした。

Laravel 側の設定

環境変数の DATABASE_URL に次の値を設定します。

mysql://{DB_USERNAME}:{DB_PASSWORD}@127.0.0.1:3306/{DB_DATABASE}?unix_socket=/cloudsql/{インスタンス接続名}

その他

gcloud run deploy で次のエラー出ました。記載されているURL先でAPIを有効にすれば解決しました。

ERROR: (gcloud.run.deploy) PERMISSION_DENIED: Service Usage API has not been used in project {project} before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/serviceusage.googleapis.com/overview?project={project}

以上で接続からテストデータの取得まで、正常な動作を確認できました。