これまで、安全なデータベース接続を実現するには、承認済みネットワークの設定やSSL証明書の管理など、煩雑な運用を行う必要がありました。本記事で取り扱うCloud SQL Auth Proxy は、安全なDB接続を確立するために設計されたDBコネクタであり、承認済みネットワークやSSL構成を必要とせずともMySQL インスタンスをはじめとする様々な Cloud SQL インスタンスに安全に接続することが可能となります。
この記事で扱うこと
本記事では、ブラウザからアクセスし、MySQLのバージョン情報やテストデータを表示することで接続を確認するデモアプリケーションを用い、Cloud Run から Cloud SQL MySQL インスタンスへ、Cloud SQL Auth Proxy を使用してプライベートIP経由で安全に接続するための具体的な方法について紹介します。
また、本記事ではAuth Proxyを用いたデータベース接続に焦点を当てるため、デモアプリケーション自体やアプリケーション構築において必要となるIAM周りに関する説明は省略します。
Cloud SQLの準備
Private IP を有効にした Cloud SQL for MySQL インスタンスを作成する
まず、パブリック IP を無効化した Cloud SQL for MySQL インスタンスを作成します。
gcloud sql instances create {Cloud SQL ID} \ --project={project ID} \ --network=projects/{project ID}/global/networks/{VPC Name} \ --database-version=MYSQL_8_0 \ --no-assign-ip \ --region=asia-northeast1 \ --backup \ --backup-start-time=15:00 \ --deletion-protection \ --enable-bin-log
- database-version=MYSQL_8_0: 使用する MySQL のバージョンを指定します。必要に応じて変更してください。
- no-assign-ip: パブリック IP アドレスを割り当てないように設定します。
- region=asia-northeast1: Cloud SQL インスタンスを作成するリージョンを指定します。Cloud Run サービスと同じリージョンを選択することを推奨します。
- backup: 自動バックアップを有効にします。
- backup-start-time=15:00: 自動バックアップを開始する UTC 時間を指定します。
- deletion-protection: インスタンスの誤削除を防ぐための削除保護を有効にします。
- enable-bin-log: バイナリログを有効にします (高可用性構成やポイントインタイムリカバリに必要)。
データベースを作成する
次に、作成した Cloud SQL インスタンス内にアプリケーションで使用するデータベースを作成します。
gcloud sql databases create {DB Name} \ --project={project ID} \ --instance={Cloud SQL ID}
データベースユーザーを作成する
アプリケーションがデータベースにアクセスするためのユーザーを作成します。
gcloud sql users create {DB User Name} \ --project={Project ID} \ --instance={Cloud SQL ID} \ --password={DB Password}
Auth Proxyの設定
Dockerfile 内で Auth Proxy を設定する
Cloud Run にデプロイするコンテナ内で Cloud SQL Auth Proxy を実行するように Dockerfile を記述します。
... # Cloud SQL Auth Proxy バイナリをダウンロードし、実行権限を与える RUN curl -o /usr/local/bin/cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.15.1/cloud-sql-proxy.linux.amd64 && chmod +x /usr/local/bin/cloud-sql-proxy # Cloud SQL Auth Proxyとアプリを並行実行する CMD ["bash", "-c", "cloud-sql-proxy ${CLOUDSQL_CONNECTION_NAME} --port 3306 --private-ip & python demo_application.py"]
Cloud Run サービスをデプロイする
作成した Docker イメージを Cloud Run にデプロイします。
gcloud run deploy check-db-connection-test-auth \ --image asia-northeast1-docker.pkg.dev/{Project ID}/check-db-connection-repo/check-db-connection \ --region=asia-northeast1 \ --project={Project ID} \ --set-env-vars DB_HOST=127.0.0.1,DB_USER={DB User Name},DB_PASSWORD={DB Password},DB_NAME={DB Name},DB_PORT=3306,CLOUDSQL_CONNECTION_NAME={Cloud SQL Connection Name} \ --network={VPC Name} \ --subnet={Subnet Name} \ --platform managed \ --allow-unauthenticated
動作確認
Cloud Run サービスの URL にアクセスするとMYSQLのバージョン情報が表示され、データベースへの接続ができていることが確認できました!
まとめ
今回の検証を通じて、Cloud RunからCloud SQLへのセキュアな接続を、Cloud SQL Auth ProxyとプライベートIPの組み合わせで実現できることを確認できました。
Auth Proxyを採用することで、ファイアウォール設定の複雑さやSSL証明書の管理負担を軽減し、高セキュリティなDB接続を確立できます。 これにより、開発者はインフラの複雑さに煩わされることなく、アプリケーション開発に集中できます。ぜひ皆さんのプロジェクトでも、この効率的なDB接続方法をご検討ください。