このページには、Cloud Run で実行しているサービスから Cloud SQL インスタンスに接続するための情報と例が含まれています。
Cloud SQL に接続された Cloud Run のサンプル ウェブ アプリケーションを実行する手順ガイドについては、Cloud Run から接続するためのクイックスタートをご覧ください。
Cloud SQL は、クラウド内のリレーショナル データベースの設定、維持、管理に役立つフルマネージド データベース サービスです。
Cloud Run は、Google Cloud インフラストラクチャ上で直接コンテナを実行できるマネージド コンピューティング プラットフォームです。
Cloud SQL インスタンスを設定する
- 接続元の Google Cloud プロジェクトで Cloud SQL Admin API を有効にします(まだ有効にしていない場合)。
- Cloud SQL for PostgreSQL インスタンスを作成します。レイテンシを短縮して、ネットワーク コストを回避し、リージョン間の障害のリスクを軽減するには、Cloud Run サービスと同じリージョンに Cloud SQL インスタンスのロケーションを選択することをおすすめします。
Cloud SQL は、デフォルトで新しいインスタンスにパブリック IP アドレスを割り振ります。 プライベート IP アドレスを割り当てることもできます。両方の接続オプションの詳細については、接続の概要ページをご覧ください。
Cloud Run を構成する
Cloud Run を構成する手順は、Cloud SQL インスタンスに割り当てた IP アドレスのタイプによって異なります。すべての下り(外向き)トラフィックをダイレクト VPC 下り(外向き)またはサーバーレス VPC アクセス コネクタ経由でルーティングする場合は、プライベート IP アドレスを使用します。2 つの下り(外向き)ネットワークを比較します。パブリック IP(デフォルト)
- インスタンスにパブリック IP アドレスがあることを確認します。これは、Google Cloud コンソール のインスタンスの [概要] ページで確認できます。パブリック IP を追加する必要がある場合は、パブリック IP の構成ページの手順をご覧ください。
- インスタンスの INSTANCE_CONNECTION_NAME を取得します。この値は、Google Cloud コンソールのインスタンスの [概要] ページに表示されます。また、次の
gcloud sql instances describe
コマンドで確認することもできます。 INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。gcloud sql instances describe INSTANCE_NAME
- Cloud Run サービスの CLOUD_RUN_SERVICE_ACCOUNT_NAME を取得します。この値は、Google Cloud コンソールで Cloud Run サービスをホストしているプロジェクトの [IAM] ページで確認できます。また、Cloud Run サービスをホストしているプロジェクトで次の
gcloud run services describe
コマンドを実行して確認することもできます。 次の変数を置き換えます。gcloud run services describe CLOUD_RUN_SERVICE_NAME --region CLOUD_RUN_SERVICE_REGION --format="value(spec.template.spec.serviceAccountName)"
- CLOUD_RUN_SERVICE_NAME: Cloud Run サービスの名前
- CLOUD_RUN_SERVICE_REGION: Cloud Run サービスのリージョン
- Cloud Run サービスのサービス アカウントを構成します。サービス アカウントに適切な Cloud SQL のロールと Cloud SQL への接続権限があることを確認してください。
Cloud SQL Client
(推奨)Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
- Cloud SQL 接続を新しいサービスに追加する場合は、サービスをコンテナ化して Container Registry または Artifact Registry にアップロードする必要があります。接続がまだない場合は、コンテナ イメージのビルドとデプロイに関する説明をご覧ください。
-
お使いのサービスのサービス アカウントには、次のいずれかの IAM ロールが必要です。
他の構成変更の場合と同様に、Cloud SQL 接続に新しい構成を設定すると、新しい Cloud Run リビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この Cloud SQL 接続が自動的に設定されます。
Console
-
サービスの構成を開始します。Cloud SQL 接続を既存のサービスに追加するには、次の操作を行います。
- [サービス] リストで、目的のサービス名をクリックします。
- [Cloud Functions で表示] で、サービス名をクリックします。
- [編集して再デプロイ] をクリックします。
- Cloud SQL インスタンスへの接続を有効にします。
- [コンテナ、変数とシークレット、接続、セキュリティ] をクリックします。
- [コンテナ] タブをクリックします。
- [Cloud SQL 接続] までスクロールします。
- [接続を追加] をクリックします。
- Cloud SQL Admin API をまだ有効にしていない場合は、[Enable the Cloud SQL Admin] ボタンをクリックします。
- プロジェクト内の Cloud SQL インスタンスへの接続を追加する場合は、メニューから目的の Cloud SQL インスタンスを選択します。
- 別のプロジェクトの Cloud SQL インスタンスを使用する場合は、メニューで [カスタムの接続文字列] を選択し、完全なインスタンス接続名を PROJECT-ID:REGION:INSTANCE-ID の形式で入力します。
- 接続を削除するには、接続の右側にカーソルを置くと表示される 削除アイコンをクリックします。
-
[作成] または [デプロイ] をクリックします。
コマンドライン
次のコマンドを使用する前に、次のように置き換えます。
- IMAGE は、デプロイするイメージに置き換えます。
- SERVICE_NAME は、Cloud Run サービスの名前に置き換えます。
-
INSTANCE_CONNECTION_NAME は、Cloud SQL インスタンスのインスタンス接続名、または接続名のカンマ区切りのリストに置き換えます。
新しいコンテナをデプロイする場合は、次のコマンドを使用します。
既存のサービスを更新する場合は、次のコマンドを使用します。gcloud run deploy \ --image=IMAGE \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME
gcloud run services update SERVICE_NAME \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME
Terraform
次のコードは、接続された Cloud SQL インスタンスを使用して Cloud Run のベースコンテナを作成します。
-
「
terraform apply
」と入力して変更を適用します。 - Cloud Run サービスを確認して、[リビジョン] タブをクリックしてから [接続] タブをクリックし、変更を確認します。
プライベート IP
サービス アカウントの承認が、Cloud SQL インスタンスを含むプロジェクトとは異なるプロジェクトに属している場合、次の操作を行います。
- 両方のプロジェクトで Cloud SQL Admin API を有効にします。
- Cloud SQL インスタンスを含むプロジェクトのサービス アカウントに IAM 権限を追加します。
- 事前に作成した Cloud SQL インスタンスにプライベート IP アドレスが割り当てられていることを確認します。内部 IP アドレスを追加するには、プライベート IP を構成するをご覧ください。
- Cloud SQL インスタンスと同じ VPC ネットワークに接続するように下り(外向き)メソッドを構成します。次の条件に注意してください。
- ダイレクト VPC 下り(外向き)とサーバーレス VPC アクセスはどちらも、Cloud VPN と VPC ネットワーク ピアリングを使用して接続された VPC ネットワークとの通信をサポートしています。
- ダイレクト VPC 下り(外向き)とサーバーレス VPC アクセスは、レガシー ネットワークをサポートしていません。
- 共有 VPC を使用している場合を除き、コネクタは、それを使用するリソースと同じプロジェクトとリージョン内に配置されている必要がありますが、異なるリージョンのリソースにトラフィックを送信できます。
- インスタンスのプライベート IP アドレスとポート
5432
を使用して接続します。
Cloud SQL に接続する
Cloud Run を構成すると、Cloud SQL インスタンスに接続できます。
パブリック IP(デフォルト)
パブリック IP パスの場合、Cloud Run は次の 2 つの方法で Cloud SQL Auth Proxyを使用して、暗号化と接続を行います。
- Unix ソケットを使用
- Cloud SQL コネクタを使用
Secret Manager を使用する
SQL 認証情報などの機密情報の格納には、Secret Manager を使用することをおすすめします。Cloud Run を使用すると、シークレットを環境変数として渡すか、ボリュームとしてマウントできます。
Secret Manager でシークレットを作成した後、次のコマンドを使用して既存のサービスを更新します。
コマンドライン
gcloud run services update SERVICE_NAME \ --add-cloudsql-instances=INSTANCE_CONNECTION_NAME --update-env-vars=INSTANCE_CONNECTION_NAME=INSTANCE_CONNECTION_NAME_SECRET \ --update-secrets=DB_USER=DB_USER_SECRET:latest \ --update-secrets=DB_PASS=DB_PASS_SECRET:latest \ --update-secrets=DB_NAME=DB_NAME_SECRET:latest
Terraform
以下では、google_secret_manager_secret
と google_secret_manager_secret_version
を使用してデータベース ユーザー、パスワード、名前の値を安全に保持するシークレット リソースを作成します。各シークレットにアクセスできるように、プロジェクトのコンピューティング サービス アカウントを更新する必要があります。
新しいシークレットが含まれるようにメインの Cloud Run リソースを更新します。
「terraform apply
」と入力して変更を適用します。
このコマンドの例では、シークレット バージョン latest を使用していますが、特定のバージョン SECRET_NAME:v1 にシークレットを固定することをおすすめします。
プライベート IP
プライベート IP パスの場合、アプリケーションは VPC ネットワークを介してインスタンスに直接接続します。この方法では、Cloud SQL Auth Proxy を使用せずに、TCP を使用して Cloud SQL インスタンスに直接接続します。
TCP による接続
Cloud SQL インスタンスのプライベート IP アドレスをホストとポートの 5432
として使用して接続します。
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 SQL Auth Proxy を使用できます。詳細な手順については、Cloud SQL Auth Proxy を使用するためのクイックスタートをご覧ください。
また、Docker コンテナ経由で Cloud SQL Proxy を使用してもテストできます。
接続プール
データベースサーバー自体またはプラットフォーム インフラストラクチャによって、基盤となるデータベースとの接続が切断される可能性があります。切断されたクライアント接続を自動的に再接続する接続プールをサポートするクライアント ライブラリを使用することをおすすめします。接続プールの使用方法の詳しい例については、データベース接続の管理ページをご覧ください。接続上限
Cloud SQL の MySQL エディションと PostgreSQL エディションの両方で、同時接続の上限が設定されています。これらの上限は、選択したデータベース エンジンによって異なります(詳しくは、Cloud SQL の割り当てと上限ページをご覧ください)。Cloud Run コンテナ インスタンスは、Cloud SQL データベースに対して 100 接続に制限されています。Cloud Run サービスまたはジョブの各インスタンスには、データベースに対して 100 個の接続を含めることができます。このサービスまたはジョブがスケーリングすると、デプロイあたりの接続の合計数が増加する可能性があります。
インスタンスごとの最大接続数は、接続プールを使用して制限できます。接続数の制限方法の詳しい例については、データベース接続の管理ページをご覧ください。
API の割り当て上限
Cloud Run には、Cloud SQL Admin API を使用する Cloud SQL Auth Proxy で接続する仕組みが用意されています。Cloud SQL Auth Proxy には API 割り当て上限が適用されます。使用される Cloud SQL Admin API の割り当ては、一度にデプロイされる特定のサービスの Cloud Run インスタンス数によって構成される Cloud SQL インスタンス数の約 2 倍です。想定される API 割り当ての使用量を変更するには、Cloud Run インスタンスの数を制限するか、増やしてください。次のステップ
- Cloud Run の詳細を確認する。
- コンテナ イメージのビルドとデプロイの詳細を確認する。
- Cloud Run を PostgreSQL と一緒に使用するための Python の完全な例を確認する。