Cloud SQLへアクセスする方法は以前まとめているが、Dockerのアプリケーションからプロキシ経由でCloud SQLヘアクセスする場合は一手間必要になる。
https://trueman-developer.blogspot.com/2020/07/gcp-cloud-sqlmysql.html
Docker Run経由でCloud SQL Proxy
DB接続名確認
gcloud sql instances describe データベース名 --format='value(connectionName)'
※Cloud SQLのダッシュボードから確認可能認証用jsonファイル取得
https://cloud.google.com/sql/docs/mysql/authentication?hl=jahttps://cloud.google.com/sql/docs/mysql/add-manage-iam-users?hl=ja#creating-a-database-user
IAMと管理 → サービスアカウントからサービスアカウントを作成。 https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts
②このサービス アカウントにプロジェクトへのアクセスを許可する でロールを追加する。
ロール: Cloud SQL クライアント
作成したサービスアカウントを選択してキーの作成(JSON)
xxxxxxxxxxxxxxxx.json
ダウンロードしたjsonファイルはProxyと同階層に配置する必要がある。
Docker run
以下はCloud SQL ProxyV2での指定方法。docker run -d \ -v ./xxxxxxxxxxxxxxx.json:/var/service-account-key.json \ -p 127.0.0.1:13306:13306 \ gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.6.0 \ --credentials-file /var/service-account-key.json joy-service:asia-northeast2:joy-service-db
※ -pは任意のポート番号。接続するときに指定する。
※ -vはボリューム。先ほど取得したjsonファイルをDocker配下へコピーする。
docker-composeの記述方法
以下はLaravel Sailの例。
cloud-sql-proxyのvolumes, networks, commandの最後の2つjsonファイル名と接続名をを変更すれば良い
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.2
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.2/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
IGNITION_LOCAL_SITES_PATH: '${PWD}'
volumes:
- '.:/var/www/html'
- '/var/www/html/storage/framework'
networks:
- sail
depends_on:
- cloud-sql-proxy
cloud-sql-proxy:
container_name: cloudsql-proxy
image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.6.0
volumes:
- ./xxxxxxxxxxxxxxxx.json:/var/xxxxxxxxxxxxxxxx.json
ports:
- "127.0.0.1:13306:13306"
networks:
- sail
command:
[
"--address",
"0.0.0.0",
"--port",
"13306",
"--credentials-file",
"/var/xxxxxxxxxxxxxxxx.json",
"service名:asia-northeast2:DB名"
]
これでDockerのアプリケーションからGCPのDBへアクセスできるようになる。
また適当なDB接続クライアントでDBの操作ができるようになる。
接続情報
Host: 127.0.0.1
Username:root
Password:
Port:13306
HostはDockerアプリケーションから接続する場合"cloud-sql-proxy"を指定する。
Username/PasswordはGCPのCloudSQLから設定する。
PortはDockerで指定した左側のポート番号になる。
参考
https://cloud.google.com/sql/docs/postgres/connect-auth-proxy?hl=ja#docker
https://qiita.com/r-dohara/items/28cf0e6a2bfb31f05d45#docker-compose