このページでは、Cloud Run 関数で実行されているサービスから Cloud SQL インスタンスへの接続に関する情報と例を示しています。
Cloud SQL に接続された Cloud Run 関数のサンプル ウェブ アプリケーションを実行する手順ガイドについては、Cloud Run 関数から接続するためのクイックスタートをご覧ください。
Cloud SQL は、クラウド内のリレーショナル データベースの設定、維持、管理に役立つフルマネージド データベース サービスです。
Cloud Run 関数は軽量なコンピューティング ソリューションで、デベロッパーはサーバーやランタイム環境を管理せずに、Cloud イベントに応答する単一目的のスタンドアロン関数を作成できます。
Cloud SQL インスタンスを設定する
- 接続元の Google Cloud プロジェクトで Cloud SQL Admin API を有効にします(まだ有効にしていない場合)。
- Cloud SQL for MySQL インスタンスを作成します。Cloud SQL のインスタンス ロケーションは、Cloud Run サービスと同じリージョンを選択することをおすすめします。このようにすると、レイテンシを短縮して、ネットワーク費用を回避し、リージョン間の障害リスクを軽減することができます。
Cloud SQL は、デフォルトで新しいインスタンスにパブリック IP アドレスを割り振ります。 プライベート IP アドレスを割り当てることもできます。両方の接続オプションの詳細については、接続の概要ページをご覧ください。
Cloud Run 関数を構成する
Cloud Run 関数を構成する手順は、Cloud SQL インスタンスに割り当てられた IP アドレスの種類によって異なります。パブリック IP(デフォルト)
Cloud SQL インスタンスへの接続を有効にするように Cloud Run 関数を構成するには:
- 上記で作成したインスタンスにパブリック IP アドレスがあることを確認します。これは、Google Cloud コンソールのインスタンスの [概要] ページで確認できます。パブリック IP アドレスを追加する必要がある場合は、パブリック IP を構成するをご覧ください。
- インスタンスの INSTANCE_CONNECTION_NAME を取得します。この値は、次の方法で取得できます。
- Google Cloud コンソールのインスタンスの [概要] ページ
- 次のコマンドの実行:
gcloud sql instances describe [INSTANCE_NAME]
- 関数のサービス アカウントを構成します。サービス アカウントの承認が Cloud SQL インスタンスとは異なるプロジェクトに属している場合、Cloud SQL Admin API を有効にして、両方のプロジェクトに以下の IAM 権限を追加します。サービス アカウントに適切な Cloud SQL のロールと Cloud SQL への接続権限があることを確認します。
- Cloud SQL に接続するには、サービス アカウントに次のいずれかの IAM ロールが必要です。
Cloud SQL Client
(推奨)Cloud SQL Editor
Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
- Cloud SQL に接続するには、サービス アカウントに次のいずれかの IAM ロールが必要です。
- Cloud Functions(第 1 世代)ではなく Cloud Functions(第 2 世代)をお使いの場合、以下は必須です(Cloud Run を構成するをご覧ください)。
- 最初に関数をデプロイします。
Google Cloud コンソールで Cloud Functions の関数を初めて作成したときには、基盤となる Cloud Run サービスがまだ作成されていません。Cloud SQL 接続は、(Cloud Function をデプロイすることで)そのサービスが作成されるまで構成できません。 - Google Cloud コンソールの [関数の詳細] ページの右上にある [Powered by Cloud Run] で、リンクをクリックして、基になる Cloud Run サービスにアクセスします。
- Cloud Run の [サービスの詳細] ページで、[新しいリビジョンの編集とデプロイ] タブを選択します。
- 標準手順(構成が変更された場合)に従って、Cloud SQL 接続に新しい構成を設定します。
これによって新しい Cloud Run リビジョンが作成されます。明示的に変更しない限り、以降のリビジョンはこの Cloud SQL 接続を自動的に受信します。
- 最初に関数をデプロイします。
プライベート IP
サービス アカウントの承認が、Cloud SQL インスタンスを含むプロジェクトとは異なるプロジェクトに属している場合、次の操作を行います。
- 両方のプロジェクトで Cloud SQL Admin API を有効にします。
- Cloud SQL インスタンスを含むプロジェクトのサービス アカウントに IAM 権限を追加します。
- 事前に作成した Cloud SQL インスタンスにプライベート IP アドレスが割り当てられていることを確認します。追加する必要がある場合は、プライベート IP を構成するをご覧ください。
- Cloud SQL インスタンスと同じ VPC ネットワークにサーバーレス VPC アクセス コネクタを作成します。次の条件に注意してください。
- 共有 VPC を使用している場合を除き、コネクタは、それを使用するリソースと同じプロジェクトとリージョン内に配置されている必要がありますが、異なるリージョンのリソースにトラフィックを送信できます。
- サーバーレス VPC アクセスでは、Cloud VPN と VPC ネットワーク ピアリングを使用して接続された VPC ネットワークとの通信がサポートされています。
- サーバーレス VPC アクセスは、レガシー ネットワークをサポートしていません。
- コネクタを使用するように Cloud Run 関数を構成します。
- インスタンスのプライベート IP アドレスとポート
3306
を使用して接続します。
Cloud SQL に接続する
Cloud Run 関数を構成すると、Cloud SQL インスタンスに接続できます。
パブリック IP(デフォルト)
パブリック IP パスの場合、Cloud Run 関数は、次の 2 つの方法で暗号化と Cloud SQL Auth Proxy を使用した接続を提供します。
- Unix ソケットを使用
- Cloud SQL コネクタを使用
プライベート IP
プライベート IP パスの場合、アプリケーションは VPC ネットワークを介してインスタンスに直接接続します。この方法では、Cloud SQL Auth Proxy を使用せずに、TCP を使用して Cloud SQL インスタンスに直接接続します。
TCP による接続
Cloud SQL インスタンスのプライベート IP アドレスをホストとポートの 3306
として使用して接続します。
Python
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Java
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
注:
- INSTANCE_CONNECTION_NAME は、<MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME> として表す必要があります。
- 引数 ipTypes=PRIVATE を使用すると、SocketFactory はインスタンスに関連付けられたプライベート IP を使用して接続するようになります。
- pom.xml ファイルの JDBC ソケット ファクトリ バージョン要件については、こちらをご覧ください。
Node.js
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Go
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
PHP
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
ベスト プラクティスとその他の情報
アプリケーションをローカルでテストする場合は、Cloud SQL Auth Proxy を使用できます。詳細な手順については、Cloud SQL Auth Proxy を使用するためのクイックスタートをご覧ください。
接続プール
基礎となるデータベースとの接続が、データベース サーバー自体または Cloud Run 関数のインフラストラクチャによって切断される可能性があります。切断されたクライアント接続を自動的に再接続する接続プールをサポートするクライアント ライブラリを使用することをおすすめします。さらに、グローバル スコープの接続プールを使用することをおすすめします。これにより、関数で、後続の関数の呼び出しで同じ接続が再利用される可能性が高くなり、インスタンスが強制削除(自動スケールダウン)されると、接続が自然に終了するためです。接続プールの使用方法の詳しい例については、データベース接続を管理するをご覧ください。接続上限
Cloud SQL では、同時接続の上限が設定されています。これらの上限は、選択したデータベース エンジンによって異なる場合があります。詳しくは、Cloud SQL の割り当てと上限をご覧ください。Cloud Run 関数との接続を使用することをおすすめしますが、最大接続数を 1 に設定することが重要です。可能な場合は、データベースにアクセスする必要がある関数の接続プールのみを初期化してください。一部の接続プールは、事前に接続を作成します。これにより、過剰なリソースが消費され、接続上限に加算される可能性があります。このため、遅延初期化を行って、必要となるまで接続プールの作成を遅らせ、接続プールが使用される関数にのみ接続プールを含めることをおすすめします。
接続数を制限する方法の詳細については、データベース接続を管理するをご覧ください。
API の割り当て上限
Cloud Run 関数には、Cloud SQL Admin API を使用する Cloud SQL Auth Proxy を使用して接続する仕組みが用意されています。Cloud SQL Auth Proxy には API 割り当て上限が適用されます。使用される Cloud SQL Admin API の割り当ては、構成済みの Cloud SQL インスタンスの数に、デプロイ済みの関数の合計数を掛けた数のおよそ 2 倍になります。最大同時呼び出し数を設定して、想定される API 割り当ての使用量を変更できます。Cloud Run 関数では、100 秒あたりに許可される API 呼び出しの数にもレート上限が定められています。
次のステップ
- Cloud Run 関数の詳細を確認する。
- Cloud Run 関数のデプロイについて詳細を確認する。
- Cloud Run 関数のトリガーの指定について詳細を確認する。
- Cloud Run 関数の構成について詳細を確認する。