Djangoサーバー(これにはGoogle Cloud SQLアクセスへのアクセスが必要です)をホストするGoogle Compute Engineで実行されている複数のDockerマシン(dev、staging)があります。複数のGoogle CloudSQLインスタンスが実行されています。インスタンスは、Google ComputeEngineインスタンスのそれぞれのDockerマシンで使用されます。
現在、Compute EngineIPをホワイトリストに登録してCloudSQLにアクセスしています。しかし、明らかな理由でIPを使用したくありません。つまり、開発マシンに静的IPを使用しません。
しかし、今度はgoogle_cloud_proxyの方法を使用してアクセスを取得したいと思います。しかし、どうすればそれを行うことができますか? GCPには、Google CloudSQLインスタンスにアクセスするための複数の方法があります。しかし、それらのどれも私のユースケースに適合しません:
このオプションがあります https://cloud.google.com/sql/docs/mysql/connect-compute-engine ;しかしこれは
では、Docker内のCLoud SQLにアクセスするにはどうすればよいですか? dockercomposeが開始するためのより良い方法である場合。 kubernetesの実装はどれほど簡単ですか(本番環境ではGoogleコンテナエンジンを使用しています)
Docker-composeを使用して、ローカルのdocker環境でcloudsql-proxyを使用する方法を理解することができました。 Cloud SQLインスタンスの認証情報をプルダウンして、準備する必要があります。それらをプロジェクトルートにcredentials.json
として保持し、プロジェクトの.gitignore
に追加します。
私が見つけた重要な部分は、ポートを転送できるように、GCPインスタンスIDの後に=tcp:0.0.0.0:5432
を使用することでした。次に、アプリケーションで、ホスト名としてlocalhost
の代わりにcloudsql-proxy
を使用します。 cloudsql-proxyコンテナによって提供されるローカルプロキシを介して接続できるように、残りのdbcredがアプリケーションシークレットで有効であることを確認してください。
注:Tomcat Javaアプリケーションを作成しており、docker-compose.yml
はそれを反映していることに注意してください。
docker-compose.yml:
version: '3'
services:
cloudsql-proxy:
container_name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: /cloud_sql_proxy --dir=/cloudsql -instances=<YOUR INSTANCE ID HERE>=tcp:0.0.0.0:5432 -credential_file=/secrets/cloudsql/credentials.json
ports:
- 5432:5432
volumes:
- ./credentials.json:/secrets/cloudsql/credentials.json
restart: always
tomcatapp-api:
container_name: tomcatapp-api
build: .
volumes:
- ./build/libs:/usr/local/Tomcat/webapps
ports:
- 8080:8080
- 8000:8000
env_file:
- ./secrets.env
restart: always