GitHub Actions x Cloud Run で Laravel から Cloud SQL に接続する
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}
以上で接続からテストデータの取得まで、正常な動作を確認できました。