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