このページでは、Cloud Functions で実行されているサービスから Cloud SQL インスタンスへの接続に関する情報と例を示しています。
Cloud SQL に接続された Cloud Functions のサンプル ウェブ アプリケーションを実行する手順ガイドについては、Cloud Functions から接続するためのクイックスタートをご覧ください。
Cloud SQL は、クラウド内のリレーショナル データベースの設定、維持、管理に役立つフルマネージド データベース サービスです。
Cloud Functions は軽量なコンピューティング ソリューションで、デベロッパーはサーバーやランタイム環境を管理せずに、Cloud イベントに応答する単一目的のスタンドアロン関数を作成できます。
Cloud SQL インスタンスの設定
- 接続元の Google Cloud プロジェクトで Cloud SQL Admin API を有効にします(まだ有効にしていない場合)。
- Cloud SQL for SQL Server インスタンスを作成します。
Cloud SQL は、デフォルトで新しいインスタンスにパブリック IP アドレスを割り当てます。Cloud Functions では、パブリック IP 経由で Cloud SQL for SQL Server に接続することはできません。代わりにプライベート IP を使用してください。詳細については、プライベート IP の構成をご覧ください。
Cloud Functions の構成
Cloud Functions を構成する手順は、Cloud SQL インスタンスに割り振られた IP アドレスの種類によって異なります。すべての下り(外向き)トラフィックを VPC コネクタ経由でルーティングする場合、プライベート IP を使用する必要があります。パブリック IP(デフォルト)
Cloud Functions では、Go、Java、Python コネクタを使用して、パブリック IP 経由で Cloud SQL for SQL Server に接続できます。
Cloud SQL インスタンスへの接続を有効にするように Cloud Functions を構成するには、次のようにします。- 上記で作成したインスタンスにパブリック 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
サーバーレス VPC アクセス コネクタは VPC ネットワークとの通信を処理します。 プライベート IP に直接接続するには、次のようにする必要があります。
- 上述で作成した Cloud SQL インスタンスにプライベート IP アドレスが割り当てられていることを確認します。プライベート IP を追加する必要がある場合は、プライベート IP の構成ページの手順をご覧ください。
- Cloud SQL インスタンスと同じ VPC ネットワークにサーバーレス VPC アクセス コネクタを作成します。
- コネクタを使用するように Cloud Functions を構成します。
- インスタンスのプライベート IP とポート
1433
を使用して接続します。
共有 VPC を使用している場合を除き、コネクタは、それを使用するリソースと同じプロジェクトとリージョン内に配置されている必要がありますが、異なるリージョンのリソースにトラフィックを送信できます。
サーバーレス VPC アクセスでは、Cloud VPN と VPC ネットワーク ピアリングを介して接続された VPC ネットワークとの通信がサポートされています。
サーバーレス VPC アクセスは、レガシー ネットワークをサポートしていません。
Cloud SQL への接続
Cloud Functions を構成すると、Cloud SQL インスタンスに接続できます。
パブリック IP(デフォルト)
パブリック IP パスの場合、Cloud Functions では、Cloud SQL コネクタを使用して暗号化と接続を行います。
Cloud SQL コネクタによる接続
Cloud SQL コネクタは、Cloud SQL インスタンスへの接続時に暗号化と IAM ベースの承認を行う言語固有のライブラリです。
Python
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Java
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
注:
- CLOUD_SQL_CONNECTION_NAME は <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME> のように指定する必要があります。
- pom.xml ファイルの JDBC ソケット ファクトリ バージョン要件については、こちらをご覧ください。
Go
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
プライベート IP
プライベート IP パスの場合、アプリケーションはサーバーレス VPC アクセスを介してインスタンスに直接接続します。この方法では、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 をご覧ください。
PHP
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
ベスト プラクティスとその他の情報
アプリケーションをローカルでテストする場合は、Cloud SQL Auth Proxy を使用できます。詳細な手順については、Cloud SQL Auth Proxy を使用するためのクイックスタートをご覧ください。
接続プール
基礎となるデータベースとの接続が、データベース サーバー自体または Cloud Functions のインフラストラクチャによって切断される可能性があります。切断されたクライアント接続を自動的に再接続する接続プールをサポートするクライアント ライブラリを使用することをおすすめします。さらに、グローバル スコープの接続プールを使用することをおすすめします。これにより、関数で、後続の関数の呼び出しで同じ接続が再利用される可能性が高くなり、インスタンスが強制削除(自動スケールダウン)されると、接続が自然に終了するためです。接続プールの使用方法の詳しい例については、データベース接続を管理するをご覧ください。接続上限
Cloud SQL では、同時接続の上限が設定されています。これらの上限は、選択したデータベース エンジンによって異なる場合があります。詳しくは、Cloud SQL の割り当てと上限をご覧ください。Cloud Functions との接続を使用することをおすすめしますが、最大接続数を 1 に設定することが重要です。可能な場合は、データベースにアクセスする必要がある関数の接続プールのみを初期化してください。一部の接続プールは、事前に接続を作成します。これにより、過剰なリソースが消費され、接続上限に加算される可能性があります。このため、遅延初期化を行って、必要となるまで接続プールの作成を遅らせ、接続プールが使用される関数にのみ接続プールを含めることをおすすめします。
接続数を制限する方法の詳細については、データベース接続を管理するをご覧ください。
API の割り当て上限
Cloud Functions には、Cloud SQL Admin API を使用する Cloud SQL Auth Proxy を使用して接続する仕組みが用意されています。Cloud SQL Auth Proxy には API 割り当て上限が適用されます。使用される Cloud SQL Admin API の割り当ては、構成済みの Cloud SQL インスタンスの数に、デプロイ済みの関数の合計数を掛けた数のおよそ 2 倍になります。最大同時呼び出し数を設定して、想定される API 割り当ての使用量を変更できます。Cloud Functions では、100 秒あたりに許可される API 呼び出しの数にもレート上限が定められています。