このページには、Cloud Build で実行しているサービスから Cloud SQL インスタンスに接続するための情報と例が含まれています。
Cloud SQL は、クラウド内のリレーショナル データベースの設定、維持、管理に役立つフルマネージド データベース サービスです。
Cloud Build は、Google Cloud インフラストラクチャでビルドを実行するサービスです。
Cloud SQL インスタンスを設定する
- 接続元の Google Cloud プロジェクトで Cloud SQL Admin API を有効にします(まだ有効にしていない場合)。
- Cloud SQL for SQL Server インスタンスを作成します。レイテンシを短縮して、ネットワーク費用を回避し、リージョン間の障害リスクを軽減するには、Cloud Run サービスと同じリージョンで Cloud SQL のインスタンス ロケーションを選択することをおすすめします。
Cloud SQL は、デフォルトで新しいインスタンスにパブリック IP アドレスを割り振ります。 プライベート IP アドレスを割り当てることもできます。両方の接続オプションの詳細については、接続の概要ページをご覧ください。
Cloud Build を構成する
Cloud Build を構成する手順は、Cloud SQL インスタンスに割り当てられた IP アドレスのタイプによって異なります。パブリック IP(デフォルト)
Cloud Build サービス アカウントに Cloud SQL インスタンスへの接続に必要な IAM ロールと権限があることを確認します。Cloud Build サービス アカウントは、Google Cloud コンソールの [IAM] ページにプリンシパル [YOUR-PROJECT-NUMBER]@cloudbuild.gserviceaccount.com
として表示されます。
Google Cloud コンソールでこのサービス アカウントを表示するには、[Google 提供のロール付与を含める] チェックボックスをオンにします。
Cloud Build サービス アカウントに、次の IAM ロールのいずれかが必要です。
Cloud SQL Client
(推奨)Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
Cloud Build サービス アカウントが Cloud SQL インスタンスとは異なるプロジェクトに属している場合、Cloud SQL Admin API と IAM の権限を両方のプロジェクトに追加する必要があります。
プライベート IP
プライベート IP 経由で Cloud SQL インスタンスに接続するには、Cloud Build が Cloud SQL インスタンスと同じ VPC ネットワークに接続されている必要があります。この構成を行うには:
- Cloud SQL インスタンスの VPC ネットワークとサービス プロデューサー ネットワークの間にプライベート接続を設定します。
- Cloud Build プライベート プールを作成します。
構成が完了すると、プールでビルドが実行されたときに、アプリケーションがインスタンスのプライベート IP アドレスとポート 1433
を使用して直接接続できるようになります。
Cloud SQL への接続
Cloud Build を構成すると、Cloud SQL インスタンスに接続できます。
パブリック IP(デフォルト)
パブリック IP パスの場合は、Cloud Build が TCP ソケットをサポートします。
データベースへの接続は、Cloud Build の手順で Cloud SQL Auth Proxy を使用して許可できます。この構成では、次の処理を行います。
- コンテナをビルドして、Container Registry に push します。
- 2 つ目のコンテナをビルドし、このときに Cloud SQL Auth Proxy バイナリをコピーします。
- Cloud Build によってビルドされたコンテナは、レジストリに push する必要はありません。ビルドの完了時に破棄されます。
- 2 つ目のコンテナを使用して、Cloud SQL Auth Proxy を起動して任意の移行コマンドを実行します。
この Cloud Build コードサンプルは、前述のサンプルアプリをデプロイした後にその Cloud SQL データベースを更新するための架空の migrate スクリプトを、Cloud SQL Auth Proxy と Cloud Build を使用して実行する方法を示すものです。この Cloud Build コードサンプルを実行するには、次の設定手順が必要です。
sql-proxy
という名前のフォルダを作成します- 次のコード行を使用して、
sql-proxy
フォルダにDockerfile
ファイルを作成します。このファイルの内容は次のとおりです。FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
sql-proxy
フォルダにcloudbuild.yaml
ファイルを作成します。cloudbuild.yaml
ファイルを更新します。- 上記の Cloud Build サンプルコードをコピーし、
cloudbuild.yaml
ファイルに貼り付けます。 substitutions:
ブロック内のサンプルコード_DATABASE_TYPE
をmssql
に更新します。substitutions:
ブロック内のサンプルコード_DATABASE_PORT
を1433
に変更します。これは SQL Server で使用されるポートです。- 次のプレースホルダ値を、プロジェクトで使用されている値に置き換えます。
mydatabase
myuser
myinstance
- 上記の Cloud Build サンプルコードをコピーし、
- Secret Manager で
database_password
という名前のシークレットを作成します。- Cloud Build サービス アカウントがこのシークレットにアクセスするには、IAM で Secret Manager のシークレット アクセサー ロールを付与する必要があります。詳細については、Secret Manager のシークレットの使用をご覧ください。
sql-proxy
フォルダに migrate.py スクリプト ファイルを作成します。- このスクリプトでは、以下の例を使用して、
cloudbuild.yaml
ファイルに作成された次の環境変数とシークレットを参照できます。os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('INSTANCE_CONNECTION_NAME')
- Bash スクリプトから同じ変数(例:
migrate.sh
)を参照するには、次の例を使用します。$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$INSTANCE_CONNECTION_NAME
- このスクリプトでは、以下の例を使用して、
- 次の
gcloud builds submit
コマンドを実行して、Cloud SQL Auth Proxy を含むコンテナをビルドし、Cloud SQL Auth Proxy を起動して、migrate.py
スクリプトを実行します。gcloud builds submit --config cloudbuild.yaml
プライベート IP
プライベート IP パスの場合、アプリケーションはプライベート プールを介してインスタンスに直接接続します。この方法では、Cloud SQL Auth Proxy を使用せずに、TCP を使用して Cloud SQL インスタンスに直接接続します。
TCP による接続
Cloud SQL インスタンスのプライベート IP アドレスをホストとポートの 1433
として使用して接続します。
Python
ウェブ アプリケーションのコンテキストでのこのスニペットの使用については、GitHub の README をご覧ください。
Java
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
注:
- CLOUD_SQL_CONNECTION_NAME は <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME> のように指定する必要があります。
- 引数 ipTypes=PRIVATE を使用すると、SocketFactory はインスタンスに関連付けられたプライベート IP を使用して接続するようになります。
- pom.xml ファイルの JDBC ソケット ファクトリ バージョン要件については、こちらをご覧ください。
Node.js
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Go
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
C#
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Ruby
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
PHP
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
その後、Cloud Build のステップを作成して、コードを直接実行できます。
この Cloud Build コードサンプルは、前述のサンプルアプリをデプロイした後にその Cloud SQL データベースを更新するための架空の移行スクリプトを、Cloud Build を使用して実行する方法を示すものです。この Cloud Build コードサンプルを実行するには、次の設定手順が必要です。
sql-private-pool
という名前のフォルダを作成します- 次のコード行を使用して、
sql-private-pool
フォルダにDockerfile
ファイルを作成します。このファイルの内容は次のとおりです。FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
sql-private-pool
フォルダにcloudbuild.yaml
ファイルを作成します。cloudbuild.yaml
ファイルを更新します。- 上記の Cloud Build サンプルコードをコピーし、
cloudbuild.yaml
ファイルに貼り付けます。 - 次のプレースホルダ値を、プロジェクトで使用されている値に置き換えます。
mydatabase
myuser
databasehost
。形式はhost:port
です。
- 上記の Cloud Build サンプルコードをコピーし、
- Secret Manager で
database_password
という名前のシークレットを作成します。- Cloud Build サービス アカウントがこのシークレットにアクセスするには、IAM で Secret Manager のシークレット アクセサー ロールを付与する必要があります。詳細については、Secret Manager のシークレットの使用をご覧ください。
sql-proxy
フォルダに migrate.py スクリプト ファイルを作成します。- このスクリプトでは、以下の例を使用して、
cloudbuild.yaml
ファイルに作成された次の環境変数とシークレットを参照できます。os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('DATABASE_HOST')
- Bash スクリプトから同じ変数(例:
migrate.sh
)を参照するには、次の例を使用します。$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$DATABASE_HOST
- このスクリプトでは、以下の例を使用して、
- 次の
gcloud builds submit
コマンドを実行して、Cloud SQL Auth Proxy を含むコンテナをビルドし、Cloud SQL Auth Proxy を起動して、migrate.py
スクリプトを実行します。gcloud builds submit --config cloudbuild.yaml
ベスト プラクティスとその他の情報
アプリケーションをローカルでテストする場合は、Cloud SQL Auth Proxy を使用できます。詳細な手順については、Cloud SQL Auth Proxy を使用するためのクイックスタートをご覧ください。
また、Docker コンテナ経由で Cloud SQL Proxy を使用してもテストできます。
データベース スキーマの移行
Cloud SQL に接続するように Cloud Build を構成すると、他のサーバーレス プラットフォームにデプロイするコードと同じコードを使用して、Cloud Build でデータベース スキーマの移行タスクを実行できます。
Secret Manager の使用
Secret Manager を使用すると、ビルドに機密情報を含めることができます。