このページでは、Cloud Functions で実行されているサービスから Cloud SQL インスタンスへの接続に関する情報と例を示しています。
Cloud SQL は、クラウド内のリレーショナル データベースの設定、維持、管理に役立つフルマネージド データベース サービスです。
Cloud Functions は軽量なコンピューティング ソリューションで、デベロッパーはサーバーやランタイム環境を管理せずに、Cloud イベントに応答する単一目的のスタンドアロン関数を作成できます。
Cloud SQL インスタンスの設定
- 接続元のプロジェクトで Cloud SQL Admin API を有効にします(まだ有効にしていない場合)。
- Cloud SQL for MySQL インスタンスを作成します。
Cloud SQL は、デフォルトで新しいインスタンスにパブリック IP アドレスを割り当てます。プライベート IP アドレスを割り当てることもできます。両方の接続オプションの詳細については、[接続の概要] ページをご覧ください。
Cloud Functions の構成
Cloud Functions を構成する手順は、Cloud SQL インスタンスに割り当てられた IP アドレスのタイプによって異なります。パブリック IP(デフォルト)
Cloud SQL インスタンスへの接続を有効にするように Cloud Functions を構成するには:
- 上述で作成したインスタンスにパブリック IP アドレスがあることを確認します。これは、Google Cloud Console のインスタンスの [概要] ページで確認できます。パブリック IP を追加する必要がある場合は、パブリック IP の構成ページの手順をご覧ください。
- インスタンスの INSTANCE_CONNECTION_NAME を取得します。これは、Google Cloud Console のインスタンスの [概要] ページで確認できます。また、コマンド
gcloud sql instances describe [INSTANCE_NAME]
を実行して確認することもできます。 - 関数のサービス アカウントを構成します。サービス アカウントに適切な Cloud SQL のロールと Cloud SQL への接続権限があることを確認してください。
- Cloud SQL に接続するには、サービス アカウントに次のいずれかの IAM ロールが必要です。
Cloud SQL Client
(推奨)Cloud SQL Editor
Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
サービス アカウントの承認が Cloud SQL インスタンスとは異なるプロジェクトに属している場合、Cloud SQL Admin API を有効にして、両方のプロジェクトに上述の IAM 権限を追加します。
- Cloud SQL に接続するには、サービス アカウントに次のいずれかの IAM ロールが必要です。
プライベート IP
サーバーレス VPC アクセス コネクタは VPC ネットワークとの通信を処理します。 プライベート IP に直接接続するには、次のようにする必要があります。
- 上述で作成した Cloud SQL インスタンスにプライベート IP アドレスが割り当てられていることを確認します。プライベート IP を追加する必要がある場合は、プライベート IP の構成ページの手順をご覧ください。
- Cloud SQL インスタンスと同じ VPC ネットワークにサーバーレス VPC アクセス コネクタを作成します。
- コネクタを使用するように Cloud Functions を構成します。
- インスタンスのプライベート IP とポート
3306
を使用して接続します。
共有 VPC を使用している場合を除き、コネクタは、それを使用するリソースと同じプロジェクトとリージョン内に配置されている必要がありますが、異なるリージョンのリソースにトラフィックを送信できます。
サーバーレス VPC アクセスでは、Cloud VPN と VPC ネットワーク ピアリングを介して接続された VPC ネットワークとの通信がサポートされています。
サーバーレス VPC アクセスは、レガシー ネットワークをサポートしていません。
Cloud SQL への接続
Cloud Functions を構成すると、Cloud SQL インスタンスに接続できます。Cloud Functions には、Cloud SQL Proxy を使用して接続する仕組みが用意されています。パブリック IP(デフォルト)
Unix ソケットとの接続
正しく構成されたら、パス /cloudsql/INSTANCE_CONNECTION_NAME
で環境のファイルシステムからアクセスされる Cloud SQL インスタンスの Unix ドメイン ソケットにサービスを接続できます。 これは、Google Cloud Console のインスタンスの [概要] ページで確認できます。また、コマンド gcloud sql instances describe [INSTANCE_NAME]
を実行して確認することもできます。
これらの接続は、追加構成なしで自動的に暗号化されます。以下に示すコードサンプルは、GitHub サイトに掲載されているより詳細な例からの抜粋です。詳しく見るには、View on GitHub
をクリックしてください。
Python
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Java
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Node.js
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Go
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
PHP
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
プライベート IP
TCP で接続
インスタンスのプライベート IP アドレスとポート 3306
を使用して直接接続します。
Python
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Java
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Node.js
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Go
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
PHP
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
ベスト プラクティスとその他の情報
アプリケーションをローカルでテストする場合、Cloud SQL プロキシを使用できます。詳細については、ローカルテストにプロキシを使用する場合のクイックスタートを参照してください。
接続プール
基礎となるデータベースとの接続が、データベース サーバー自体または Cloud Functions のインフラストラクチャによって切断される可能性があります。切断されたクライアント接続を自動的に再接続する接続プールをサポートするクライアント ライブラリを使用することをおすすめします。さらに、グローバル スコープの接続プールを使用することをおすすめします。これにより、関数で、後続の関数の呼び出しで同じ接続が再利用される可能性が高くなり、インスタンスが強制削除(自動スケールダウン)されると、接続が自然に終了するためです。接続プールの使用方法の詳しい例については、データベース接続を管理するをご覧ください。接続上限
Cloud SQL では、同時接続の上限が設定されています。これらの上限は、選択したデータベース エンジンによって異なる場合があります。詳しくは、Cloud SQL の割り当てと上限をご覧ください。Cloud Functions との接続を使用することをおすすめしますが、最大接続数を 1 に設定することが重要です。可能な場合は、データベースにアクセスする必要がある関数の接続プールのみを初期化してください。一部の接続プールは、事前に接続を作成します。これにより、過剰なリソースが消費され、接続上限に加算される可能性があります。このため、遅延初期化を行って、必要となるまで接続プールの作成を遅らせ、接続プールが使用される関数にのみ接続プールを含めることをおすすめします。
接続数を制限する方法の詳細については、データベース接続を管理するをご覧ください。