このページでは、Google Cloud Platform の外部で実行されるアプリケーションから Cloud SQL への接続を確立する方法について説明します。
Cloud SQL への接続に関するさまざまなオプションについては、外部アプリケーション用の接続オプションをご覧ください。パブリック IP の構成方法については、パブリック IP を構成するをご覧ください。
データベース接続は、サーバーと接続元アプリケーションのリソースを消費します。アプリケーションのフットプリントを最小限に抑え、Cloud SQL の接続制限を超える可能性を少なくするには、常に適切な接続管理方法を使用してください。詳細については、データベース接続の管理をご覧ください。
準備
アプリケーションへのアクセスを付与しても、データベース ユーザー アカウントがインスタンスに自動的に接続できるようになるわけではありません。インスタンスに接続するには、接続に使用できるデータベース ユーザー アカウントが必要です。新しいインスタンスの場合、デフォルトのユーザー アカウントを構成しておく必要があります。詳細についてはこちらをご覧ください。
Cloud SQL インスタンスに接続するには、次の方法を使用できます。
- プロキシを使用
- 1 つ以上のパブリック IP アドレスに対するアクセスを構成
- JDBC ソケット ファクトリを使用(Java プログラミング言語を使用する場合)
- Cloud SQL Proxy ライブラリを使用(Go プログラミング言語を使用する場合)
プロキシを使用して外部アプリケーションから接続する
ローカルテスト環境用(本番環境用ではなく)に Cloud SQL Proxy を設定する場合は、これらの手順の代わりにプロキシ クイックスタートを使用してください。
Java または Go プログラミング言語を使用している場合、Cloud SQL Proxy を使用する以外の代替手段がいくつかあります。詳細についてはこちらをご覧ください。
1. API を有効にする
Cloud SQL Admin API を有効にします。2. ローカルマシンにプロキシ クライアントをインストールする
Linux 64 ビット
- プロキシをダウンロードします。
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
- プロキシを実行できるようにします。
chmod +x cloud_sql_proxy
Linux 32 ビット
- プロキシをダウンロードします。
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
- プロキシを実行できるようにします。
chmod +x cloud_sql_proxy
macOS 64 ビット
- プロキシをダウンロードします。
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
- プロキシを実行できるようにします。
chmod +x cloud_sql_proxy
macOS 32 ビット
- プロキシをダウンロードします。
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
- プロキシを実行できるようにします。
chmod +x cloud_sql_proxy
Windows 64 ビット
https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe を右クリックして [名前を付けてリンク先を保存] を選択し、プロキシをダウンロードします。ファイルの名前をcloud_sql_proxy.exe
に変更します。
Windows 32 ビット
https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe を右クリックして [名前を付けてリンク先を保存] を選択し、プロキシをダウンロードします。ファイルの名前をcloud_sql_proxy.exe
に変更します。
3. プロキシを認証する方法を決定する
プロキシ認証オプションの詳細については、こちらをご覧ください。
4. 認証方法で必要な場合は、サービス アカウントを作成する
- Google Cloud Platform Console の [サービス アカウント] ページに移動します。
- 必要に応じて、Cloud SQL インスタンスを含むプロジェクトを選択します。
- [サービス アカウントを作成] をクリックします。
- [サービス アカウントの作成] ダイアログで、わかりやすいサービス アカウント名を指定します。
-
[役割] で、次のいずれかの役割を選択します。
- [Cloud SQL] > [Cloud SQL クライアント]
- [Cloud SQL] > [Cloud SQL 編集者]
- [Cloud SQL] > [Cloud SQL 管理者]
[Project] > [編集者] の順に選択して、基本の役割である編集者を使用することもできますが、編集者の役割には Google Cloud Platform 全体に対する権限が含まれます。
これらの役割が表示されない場合、Google Cloud Platform ユーザーに
resourcemanager.projects.setIamPolicy
権限がない可能性があります。権限を確認するには、Google Cloud Platform Console の [IAM] ページにアクセスし、自分のユーザー ID を検索します。 - 必要に応じて [サービス アカウント ID] を一意のわかりやすい値に変更して、後でこのサービス アカウントを簡単に見つけられるようにします。
- [新しい秘密鍵の提供] をクリックします。
-
デフォルトのキータイプは
JSON
であり、この値を使用するのが適切です。 -
[作成] をクリックします。
秘密鍵ファイルがマシンにダウンロードされます。秘密鍵ファイルは、別の場所に移動できます。安全な場所に鍵ファイルを保管してください。
5. プロキシに対するインスタンスの指定方法を決定する
プロキシ インスタンス指定オプションの詳細については、こちらをご覧ください。
6. プロキシを開始する
プロキシに渡すオプションは、前に選択した認証とインスタンス指定のオプションによって異なります。
言語や環境に応じて、TCP ソケットまたは Unix ソケットのどちらかを使用してプロキシを開始できます。
TCP ソケット
[インスタンスの詳細] ページからインスタンス接続名をコピーします。
例:
myproject:us-central1:myinstance
- サービス アカウントを使用してプロキシを認証する場合は、サービス アカウントを作成したときに作成された秘密鍵ファイルのクライアント マシン上での場所を記録しておきます。
- プロキシを開始します。
考えられるプロキシ呼び出し文字列を以下にいくつか示します。
- Cloud SDK 認証を使用する場合:
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432
指定されたポートは、ローカル データベース サーバーなどがまだ使用していないものである必要があります。 - サービス アカウントと明示的なインスタンス指定を使用する場合(本番環境で推奨):
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 \ -credential_file=<PATH_TO_KEY_FILE> &
プロキシ オプションの詳細については、プロキシを認証するためのオプションとインスタンスを指定するためのオプションをご覧ください。
- Cloud SDK 認証を使用する場合:
Unix ソケット
- 明示的なインスタンス指定を使用する場合は、インスタンス接続名を [インスタンスの詳細] ページからコピーします。
- プロキシ ソケットを格納するディレクトリを作成します。
sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
- サービス アカウントを使用してプロキシを認証する場合は、サービス アカウントを作成したときに作成された秘密鍵ファイルのクライアント マシン上での場所を記録しておきます。
- 新しいターミナル ウィンドウを開き、プロキシを開始します。
考えられるプロキシ呼び出し文字列を以下にいくつか示します。
- サービス アカウントと明示的なインスタンス指定を使用する場合(本番環境に推奨)
./cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME> \ -credential_file=<PATH_TO_KEY_FILE> &
- Cloud SDK 認証と自動インスタンス検出を使用する場合
./cloud_sql_proxy -dir=/cloudsql &
専用のターミナルでプロキシを開始することをおすすめします。こうすれば、他のプログラムからの出力と混ざることなく出力をモニタリングできます。
プロキシ オプションの詳細については、プロキシを認証するためのオプションとインスタンスを指定するためのオプションをご覧ください。
- サービス アカウントと明示的なインスタンス指定を使用する場合(本番環境に推奨)
7. プロキシを使用して Cloud SQL に接続するようにアプリケーションを更新する
プロキシを使用して Cloud SQL インスタンスに接続するために必要なコードの文の細部は、使用する言語とフレームワークによって異なります。
プロキシへの接続には、TCP や Unix ソケットの場合と同じ方法を使用します。ただし、プロキシの呼び出し方法によって異なります。
TCP ソケット
TCP ソケットでは、プロキシをローカルホストとして使用できます。
127.0.0.1:5432
Unix ソケット
Unix ソケットでは、次のパスを使用してプロキシを使用できます。
<PROXY_PATH>/<INSTANCE_CONNECTION_NAME>
PROXY_PATH
は、プロキシを開始したときに -dir オプションで設定したディレクトリへのパスです。このドキュメントの例では /cloudsql
を使用します。
インスタンスの接続名は Google Cloud Platform Console の [インスタンスの詳細] ページで確認できます。また、<PROJECT-ID>:<REGION>:<INSTANCE_NAME>
を使用することもできます。
お困りの場合、プロキシのトラブルシューティングについては、Cloud SQL Proxy 接続のトラブルシューティングをご覧ください。または、Cloud SQL のサポートページを参照してください。
言語固有の情報と例
Unix または TCP ソケットに接続できる任意の言語を使用して、プロキシに接続できます。アプリケーションでどのように連携するのかを把握できるように、プロキシの呼び出しと接続ステートメントの例をいくつか次に紹介します。
Python
簡潔にするため、このプロキシ呼び出しステートメントではローカル Cloud SDK 認証を使用しています。実際の呼び出しステートメントは、認証方法やインスタンスの指定方法によって異なる場合があります。 詳細についてはこちらをご覧ください。
Psycopg2 と TCP
プロキシを呼び出します。
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
接続ステートメント:
import psycopg2 conn = psycopg2.connect(user=<USER>, password=<PASSWORD>, host='localhost', port='5432')
Psycopg2 と Unix
プロキシを呼び出します。
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME> -dir=/cloudsql &
接続ステートメント:
import psycopg2 conn = psycopg2.connect(user=<USER>, password=<PASSWORD>, host='/cloudsql/<INSTANCE_CONNECTION_NAME>')
SQLAlchemy と TCP
プロキシを呼び出します。
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
接続ステートメント:
from sqlalchemy import create_engine engine = create_engine('postgresql+psycopg2://<USER>:<PASSWORD>@localhost:5432/')
SQLAlchemy と Unix
プロキシを呼び出します。
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME> -dir=/cloudsql &
接続ステートメント:
from sqlalchemy import create_engine engine = create_engine('postgresql+psycopg2://<USER>:<PASSWORD>@/?host=/cloudsql/<INSTANCE_CONNECTION_NAME>')
Java
Java プログラミング言語では、Unix ソケットのネイティブ サポートは提供されていません。TCP ソケット、または Cloud SQL Proxy との UNIX ソケット サポートを提供するライブラリを使用できますが、IP アドレスをホワイトリストに登録することなく PostgreSQL インスタンスに接続する最も簡単な方法は、JDBC ソケット ファクトリを使用することです。
JDBC ソケット ファクトリは、クライアント側プロキシ ソフトウェアの代替手段を提供します。また、Cloud SQL Proxy の場合と同じように Cloud SQL API を有効にする必要があります。ソケット ファクトリは、プロキシと同じレベルの暗号化を提供し、Cloud SDK 認証情報を使用して認証するため、Cloud SDK をインストールして認証する必要があります。
コードのサンプルについては、JDBC ドライバ用の Cloud SQL ソケット ファクトリをご覧ください。手順については、README ファイルをご覧ください。
Go
Go プログラミング言語では、次の 2 とおりの方法で Cloud SQL Proxy を使用できます。
- Go Proxy ライブラリ
- コンパニオン プロセス
Go Proxy ライブラリ
ライブラリを使用する場合、プロキシを独自のプロセスとして明示的に開始する必要がないため、Go プログラムからプロキシを使用するにはこれが最も簡単な方法です。
import ( "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres" ) ... dsn := fmt.Sprintf("host=%s dbname=%s user=%s password=%s sslmode=disable", <INSTANCE_CONNECTION_NAME>, <DATABASE_NAME>, <DATABASE_USER>, <PASSWORD>) db, err := sql.Open("cloudsqlpostgres", dsn)
詳しくは、Cloud SQL Proxy の Github ページをご覧ください。
コンパニオン プロセス
また、プロキシをコンパニオン プロセスとして実行し、アプリケーションから接続することもできます。
簡潔にするため、このプロキシ呼び出しステートメントではローカル Cloud SDK 認証を使用しています。実際の呼び出しステートメントは、認証方法やインスタンスの指定方法によって異なる場合があります。 詳細についてはこちらをご覧ください。
TCP
プロキシ呼び出しステートメント:
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
接続ステートメント:
import ( "database/sql" _ "github.com/lib/pq" ) dsn := fmt.Sprintf("host=localhost port=5432 user=%s password=%s dbname=%s sslmode=disable", dbUser, dbPassword, dbName) db, err := sql.Open("postgres", dsn)
Unix ソケット
プロキシ呼び出しステートメント:
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME> -dir=/cloudsql &
接続ステートメント:
import ( "database/sql" _ "github.com/lib/pq" ) dsn := fmt.Sprintf("host=/cloudsql/%s user=%s password=%s dbname=%s sslmode=disable", INSTANCE_CONNECTION_NAME, dbUser, dbPassword, dbName) db, err := sql.Open("postgres", dsn)
パブリック IP 接続のアクセスを構成する
アプリケーションが接続に使用するパブリック IP アドレスを承認することで、Cloud SQL インスタンスへのアクセスをアプリケーションに許可できます。
承認済みネットワークとしてプライベート ネットワーク(10.x.x.x など)を指定することはできません。
PostgreSQL インスタンスは IPv4 アドレスのみをサポートします。これらは自動的に静的 IP アドレスで構成されます。IP 接続によるアクセスを構成するには、次の手順を実行します。
Console
- アプリケーションの IP アドレスを確認します。 詳細
- アプリケーションの IP アドレスを承認して、インスタンスに接続します。
詳しくは、承認されたアドレスを追加するをご覧ください。
- インスタンスに割り当てられた IP アドレスは [インスタンスの詳細] ページで確認できます。この値は、アプリケーションの接続文字列に必要となります。
gcloud
- クライアント マシンの IP アドレスを確認します。 詳細
- アプリケーションの IP アドレスを承認して、インスタンスに接続します。
詳しくは、承認されたアドレスを追加するをご覧ください。
- インスタンスの IP アドレスを取得します。
gcloud sql instances describe [INSTANCE_NAME]
出力の
ipAddress
フィールドを探します。この値は、アプリケーションの接続文字列に必要となります。
cURL
- アプリケーションの IP アドレスを確認します。 詳細
- アプリケーションの IP アドレスを承認して、インスタンスに接続します。
詳しくは、承認されたアドレスを追加するをご覧ください。
- インスタンスの IP アドレスを取得します。
ACCESS_TOKEN="$(gcloud auth application-default print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ -X GET \ https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]
ipAddresses.ipAddress
の値をメモします。この値は、アプリケーションの接続文字列に必要となります。
お困りの場合、プロキシのトラブルシューティングについては、Cloud SQL Proxy 接続のトラブルシューティングをご覧ください。または、Cloud SQL のサポートページを参照してください。
IP アドレスが動的に割り当てられるアプリケーションのアクセスを構成する
一部のアプリケーションでは、動的に割り当てられる一時的な IP アドレスを使用して、Cloud SQL インスタンスに接続する必要があります。これは、特に Platform as a Service(Paas)アプリケーションの場合に該当します。
この場合、Cloud SQL プロキシを使用する必要があります。
接続をテストする
PSQL クライアントを使用して、ローカル環境から接続できるかどうかテストできます。詳細については、IP アドレスを使用して PSQL クライアントを接続すると Cloud SQL Proxy を使用して PSQL クライアントを接続するをご覧ください。
お困りの場合、プロキシのトラブルシューティングについては、Cloud SQL Proxy 接続のトラブルシューティングをご覧ください。または、Cloud SQL のサポートページを参照してください。
アプリケーションの IP アドレスを確認する
アプリケーションを実行しているパソコンの IP アドレスから Cloud SQL インスタンスへのアクセスを承認できるようにするため、そのパソコンの IP アドレスを確認するには、次のいずれかのオプションを使用します。
- パソコンがプロキシの背後にない場合は、パソコンにログインし、このリンクを使用して IP アドレスを確認します。
- パソコンがプロキシの背後にある場合は、パソコンにログインし、whatismyipaddress.com などのサービスやツールを使用して実際の IP アドレスを確認します。
次のステップ
- アプリケーションでデータベース接続を管理する方法を学習します。
- 外部アプリケーション用の接続オプションについて学習します。
- PSQL クライアントを使用して接続する方法の詳細を確認します。
- IP 接続を構成する方法を学習します。
- プロキシについて学習します。
- サポート用オプションについて学習します。