このページには、App Engine スタンダード環境で動作中のサービスから Cloud SQL インスタンスに接続するための情報と例が記載されています。
Cloud SQL は、クラウド内のリレーショナル データベースの設定、維持、管理に役立つフルマネージド データベース サービスです。
App Engine は、大規模なウェブ アプリケーションを開発およびホスティングするための、フルマネージド型のサーバーレス プラットフォームです。アプリの開発では複数の一般的な言語、ライブラリ、フレームワークからの選択が可能で、開発したアプリのインスタンスのサーバー プロビジョニングとスケーリングは App Engine によってオンデマンドで行われます。
Cloud SQL インスタンスを設定する
- 接続元の Google Cloud プロジェクトで Cloud SQL Admin API を有効にします(まだ有効にしていない場合)。
- Cloud SQL for SQL Server インスタンスを作成します。レイテンシを短縮して、ネットワーク費用を回避し、リージョン間の障害リスクを軽減するには、Cloud Run サービスと同じリージョンで Cloud SQL のインスタンス ロケーションを選択することをおすすめします。
Cloud SQL は、デフォルトで新しいインスタンスにパブリック IP アドレスを割り振ります。 プライベート IP アドレスを割り当てることもできます。両方の接続オプションの詳細については、接続の概要ページをご覧ください。
App Engine スタンダード環境を構成する
App Engine スタンダード環境を構成する手順は、Cloud SQL インスタンスに割り当てられた IP アドレスのタイプによって異なります。パブリック IP(デフォルト)
App Engine スタンダード環境では、Go、Java、Python のコネクタを使用してパブリック IP 経由で Cloud SQL for SQL Server に接続できます。
パブリック IP を使用して Cloud SQL インスタンスに接続できるように App Engine スタンダード環境を構成するには:- インスタンスにパブリック IP アドレスがあることを確認します。これは、Google Cloud コンソールのインスタンスの [概要] ページで確認できます。パブリック IP を追加する必要がある場合は、パブリック IP の構成ページの手順をご覧ください。
- インスタンスの INSTANCE_CONNECTION_NAME を取得します。この値は、Google Cloud コンソールのインスタンスの [概要] ページで確認できます。また、次の
gcloud sql instances describe
コマンドを実行して確認することもできます。 INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。gcloud sql instances describe INSTANCE_NAME
INSTANCE_NAME 変数は、インスタンスの名前に置き換えます。 - アプリが Cloud SQL の呼び出しを認証するために使用しているサービス アカウントに、適切な Cloud SQL のロールと権限があることを確認します。
- お使いのサービスのサービス アカウントには、次のいずれかの IAM ロールが必要です。
Cloud SQL Client
(推奨)Cloud SQL Editor
Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
デフォルトでは、アプリは App Engine サービス アカウントを使用して接続を承認します。サービス アカウント ID の形式は
PROJECT_ID@appspot.gserviceaccount.com
です。サービス アカウントの承認が Cloud SQL インスタンスとは異なるプロジェクトに属している場合、Cloud SQL Admin API と IAM の権限を両方のプロジェクトに追加する必要があります。
- お使いのサービスのサービス アカウントには、次のいずれかの IAM ロールが必要です。
プライベート 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 アクセスは、以前のネットワークをサポートしていません。
- コネクタを使用できるように App Engine スタンダード環境を構成します。
- インスタンスのプライベート IP アドレスとポート
1433
を使用して接続します。
Cloud SQL に接続する
App Engine スタンダード環境を構成すると、Cloud SQL インスタンスに接続できます。
パブリック IP(デフォルト)
パブリック IP パスの場合、App Engine スタンダード環境では、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 をご覧ください。
C#
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Ruby
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
PHP
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
ベスト プラクティスとその他の情報
アプリケーションをローカルでテストする場合は、Cloud SQL Auth Proxy を使用できます。詳細な手順については、Cloud SQL Auth Proxy を使用するためのクイックスタートをご覧ください。
接続プール
データベース サーバー自体、または基盤となるインフラストラクチャによって、基盤となるデータベースへの接続が切断される可能性があります。これを軽減するには、接続プールと自動再接続をサポートするクライアント ライブラリを使用することをおすすめします。
接続上限
スタンダード環境で実行される App Engine の各インスタンスでは、インスタンスに対する同時接続数が最大 100 個に制限されます。PHP 5.5 アプリケーションについては、同時接続数が最大 60 個に制限されます。この上限はアプリケーション インスタンスごとに適用されます。つまり、App Engine アプリケーションの各インスタンスはデータベースに対してこれだけ多くの接続を保持できるため、スケールするにつれて、デプロイあたりの接続の合計数が増加する可能性があります。詳しくは、要素のスケーリングをご覧ください。
インスタンスごとの最大接続数は、接続プールを使用して制限できます。接続数の制限方法の詳しい例については、データベース接続の管理ページをご覧ください。
App Engine アプリケーションでは、使用状況や環境に応じてリクエストに時間制限が設けられる場合があります。詳しくは、App Engine のスタンダード環境とフレキシブル環境におけるインスタンスの管理方法をご覧ください。
API の割り当て上限
App Engine には、Cloud SQL Admin API を使用する Cloud SQL Auth Proxy を使用して接続する仕組みが用意されています。Cloud SQL Auth Proxy には API 割り当て上限が適用されます。Cloud SQL Admin API の開始時に 2 つの割り当てが使用され、その後は 1 時間あたり平均 2 つが使用されます。デフォルトの割り当ては、1 ユーザー、1 分あたり 180 件です。さらに App Engine アプリケーションには、App Engine の割り当てページで説明されている App Engine の割り当てと上限も適用されます。