このページには、Cloud Run(フルマネージド)で実行しているサービスから Cloud SQL インスタンスに接続するための情報と例が含まれています。
Cloud SQL は、クラウド内のリレーショナル データベースの設定、維持、管理に役立つフルマネージド データベース サービスです。
Cloud SQL インスタンスの設定
- 接続元のプロジェクトで Cloud SQL Admin API を有効にします(まだ有効にしていない場合)。
- Cloud SQL for MySQL インスタンスを作成します。
Cloud SQL は、デフォルトで新しいインスタンスにパブリック IP アドレスを割り当てます。プライベート IP アドレスを割り当てることもできます。両方の接続オプションの詳細については、[接続の概要] ページをご覧ください。
Cloud Run を構成する(フルマネージド)
Cloud Run(フルマネージド)を構成する手順は、Cloud SQL インスタンスに割り当てた IP アドレスのタイプによって異なります。パブリック IP(デフォルト)
- 作成したインスタンスにパブリック IP アドレスがあることを確認します。これは、Google Cloud Console のインスタンスの [概要] ページで確認できます。パブリック IP を追加する必要がある場合は、パブリック IP の構成ページの手順をご覧ください。
- インスタンスの INSTANCE_CONNECTION_NAME を取得します。これは、Google Cloud Console のインスタンスの [概要] ページで確認できます。また、コマンド
gcloud sql instances describe [INSTANCE_NAME]
を実行して確認することもできます。 - サービスのサービス アカウントを構成します。サービス アカウントに適切な 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 接続に新しい構成を設定すると、新しい Cloud Run リビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この Cloud SQL 接続が自動的に設定されます。
Console
-
サービスを構成します。
-
Cloud SQL 接続を新しいサービスに追加する場合:
-
サービスをコンテナ化して Container Registry にアップロードする必要があります。コンテナ イメージがまだない場合は、コンテナ イメージのビルドとデプロイに関する説明をご覧ください。
-
[サービスの作成] をクリックします。
-
-
Cloud SQL 接続を既存のサービスに追加する場合:
-
サービス名をクリックします。
-
[新しいリビジョンをデプロイ] をクリックします。
-
-
-
Cloud SQL への接続を有効にします。
- [オプションの設定を表示] をクリックします。
- プロジェクト内の 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 \ --update-env-vars INSTANCE_CONNECTION_NAME="INSTANCE-CONNECTION-NAME"
既存のサービスを更新する場合は、次のコマンドを使用します。gcloud run services update SERVICE-NAME \ --add-cloudsql-instances INSTANCE-CONNECTION-NAME \ --update-env-vars INSTANCE_CONNECTION_NAME="INSTANCE-CONNECTION-NAME"
プライベート IP
サーバーレス VPC アクセス コネクタは VPC ネットワークとの通信を処理します。 プライベート IP に直接接続するには、次のようにする必要があります。
- 上述で作成した Cloud SQL インスタンスにプライベート IP アドレスが割り当てられていることを確認します。プライベート IP を追加する必要がある場合は、プライベート IP の構成ページの手順をご覧ください。
- Cloud SQL インスタンスと同じ VPC ネットワークにサーバーレス VPC アクセス コネクタを作成します。
- コネクタを使用するように Cloud Run(フルマネージド)を構成します。
- インスタンスのプライベート IP とポート
3306
を使用して接続します。
共有 VPC を使用している場合を除き、コネクタは、それを使用するリソースと同じプロジェクトとリージョン内に配置されている必要がありますが、異なるリージョンのリソースにトラフィックを送信できます。
サーバーレス VPC アクセスでは、Cloud VPN と VPC ネットワーク ピアリングを介して接続された VPC ネットワークとの通信がサポートされています。
サーバーレス VPC アクセスは、レガシー ネットワークをサポートしていません。
Cloud SQL への接続
Cloud Run(フルマネージド)を構成すると、Cloud SQL インスタンスに接続できます。Cloud Run(フルマネージド)では、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 をご覧ください。
C#
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Go
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Ruby
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
PHP
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
プライベート IP
TCP で接続
インスタンスのプライベート IP アドレスとポート 3306
を使用して直接接続します。
Python
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Java
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Node.js
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Go
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
C#
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
Ruby
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
PHP
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
ベスト プラクティスとその他の情報
アプリケーションをローカルでテストする場合、Cloud SQL プロキシを使用できます。詳細については、ローカルテストにプロキシを使用する場合のクイックスタートをご覧ください。
また、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 Proxy で接続する仕組みが用意されています。Cloud SQL Proxy には API 割り当て上限が適用されます。次のステップ
- Cloud Run の詳細を確認する。
- コンテナ イメージのビルドとデプロイの詳細を確認する。
- Cloud Run を MySQL と一緒に使用するための Python の完全な例を確認する。