Cloud SQL Auth Proxy を使用して接続する

このページでは、Cloud SQL Auth Proxy を使用して Cloud SQL インスタンスに接続する方法について説明します。

パブリック IP を使用して MySQL クライアントを Cloud SQL インスタンスに接続する方法については、データベース クライアントを使用して接続するをご覧ください。

Cloud SQL Auth Proxy の動作の詳細については、Cloud SQL Auth Proxy についてをご覧ください。

始める前に

Cloud SQL インスタンスに接続するには、次の作業が必要です。

  1. Cloud SQL API を有効にします。

    API を有効にする

  2. Cloud SQL インスタンスを作成し、デフォルト ユーザーを構成します。

    インスタンスの作成の詳細については、インスタンスを作成するをご覧ください。

    デフォルト ユーザーの構成については、デフォルト ユーザー アカウントを構成するをご覧ください。

  3. Cloud SDK をインストールし、初期化します。
  4. 省略可。Cloud SQL Auth プロキシの Docker クライアントをインストールします。

Cloud SQL Auth Proxy を認証するためのオプション

これらのオプションではすべて、Cloud SQL インスタンスを識別するための接続文字列として INSTANCE_CONNECTION_NAME を使用します。INSTANCE_CONNECTION_NAME は、Google Cloud Console のインスタンスの [概要] ページに表示されます。また、次のコマンドを実行して確認することもできます。

gcloud sql instances describe INSTANCE_NAME --project PROJECT_ID

例: gcloud sql instances describe myinstance --project myproject

これらのオプションの中には、アカウントの RSA 秘密鍵を含む JSON 認証情報ファイルを使用するものもあります。サービス アカウントの JSON 認証情報ファイルを作成する手順については、サービス アカウントの作成をご覧ください。

Cloud SQL Auth Proxy では、環境に応じて、認証のための代替手段が複数用意されています。Cloud SQL Auth Proxy は、次の順序で各項目をチェックし、最初に見つかったものを使用して認証を試みます。

  1. credential_file フラグによって指定された認証情報。

    サービス アカウントを使用して、関連付けられた JSON ファイルを作成してダウンロードし、Cloud SQL Auth Proxy を起動するとき、そのファイルのパスに -credential_file フラグを設定します。サービス アカウントには、Cloud SQL インスタンスに対する必要な権限が付与されていることが必要です。

    コマンドラインでこのオプションを使用するには、-credential_file フラグを JSON 認証情報ファイルのパスとファイル名に設定して、cloud_sql_proxy コマンドを呼び出します。パスは現在の作業ディレクトリへの絶対パス、または相対パスとして設定できます。例:

    ./cloud_sql_proxy -credential_file=PATH_TO_KEY_FILE -instances=INSTANCE_CONNECTION_NAME
      

    サービス アカウントに IAM ロールを追加する方法の詳細については、サービス アカウントへのロールの付与をご覧ください。

    Cloud SQL でサポートされるロールの詳細については、Cloud SQL のプロジェクトのアクセス制御をご覧ください。

  2. アクセス トークンによって指定された認証情報。

    アクセス トークンを作成し、OAuth 2.0 アクセス トークンに -token フラグを設定して cloud_sql_proxy コマンドを呼び出します。例:
    ./cloud_sql_proxy -token=ACCESS_TOKEN -instances=INSTANCE_CONNECTION_NAME
      
  3. 環境変数によって指定された認証情報。

    このオプションは、-credential_file コマンドライン引数を使用する代わりに、GOOGLE_APPLICATION_CREDENTIALS 環境変数で設定する JSON 認証情報ファイルを指定する点を除けば、-credential_file フラグを使用する場合と類似しています。
  4. 認証済みの Cloud SDK クライアントの認証情報。

    Cloud コマンドライン ツールをインストールし、個人アカウントで認証した場合は、Cloud SQL Auth Proxy で同じアカウント認証情報を使用できます。この方法は、開発環境の運用を開始する際に特に便利です。

    gcloud auth login 用のアカウントが選択されていない場合は、Cloud SQL Auth Proxy によって gcloud auth application-default login 用に選択されているアカウントがチェックされます。

  5. Compute Engine インスタンスに関連付けられている認証情報。

    Cloud SQL に Compute Engine インスタンスから接続している場合、Cloud SQL Auth Proxy は Compute Engine インスタンスに関連付けられているサービス アカウントを使用できます。サービス アカウントに Cloud SQL インスタンスに対する必要な権限が付与されている場合、Cloud SQL Auth Proxy は正常に認証を行います。

    Compute Engine インスタンスが Cloud SQL インスタンスと同じプロジェクトに属している場合、Compute Engine インスタンスのデフォルトのサービス アカウントには、Cloud SQL Auth Proxy の認証に必要な権限が付与されています。この 2 つのインスタンスが別々のプロジェクトに属している場合は、Cloud SQL インスタンスが属するプロジェクトに Compute Engine インスタンスのサービス アカウントを追加する必要があります。

  6. 環境のデフォルトのサービス アカウント

    前述のいずれの場所でも認証情報を見つけることができない場合、Cloud SQL Auth Proxy はサーバー間での本番環境アプリケーションの認証の設定に記載されたロジックに従います。一部の環境(Compute Engine、App Engine など)では、アプリケーションがデフォルトで認証に使用できるデフォルトのサービス アカウントが用意されています。デフォルトのサービス アカウントを使用する場合は、アカウントにロールと権限で概説している権限が付与されている必要があります。Google Cloud の認証のアプローチについて詳しくは、認証の概要をご覧ください。

サービス アカウントを作成する

  1. Google Cloud Console の [サービス アカウント] ページに移動します。

    [サービス アカウント] ページに移動

  2. Cloud SQL インスタンスを含むプロジェクトを選択します。
  3. [サービス アカウントを作成] をクリックします。
  4. [サービス アカウントの作成] ダイアログで、わかりやすいサービス アカウント名を指定します。
  5. [サービス アカウント ID] を一意のわかりやすい値に変更してから、[作成] をクリックします。
  6. [ロール] には、次のいずれかのロールを選択してから、[続行] をクリックし、[完了] をクリックします。
    • [Cloud SQL] > [Cloud SQL クライアント]
    • [Cloud SQL] > [Cloud SQL 編集者]
    • [Cloud SQL] > [Cloud SQL 管理者]
  7. 新しいサービス アカウントの操作メニューをクリックし、[鍵を管理] を選択します。
  8. [鍵を追加] プルダウン メニューをクリックして、[新しい鍵を作成] をクリックします。
  9. 鍵のタイプが JSON であることを確認し、[作成] をクリックします。

    秘密鍵ファイルがマシンにダウンロードされます。秘密鍵ファイルは、別の場所に移動できます。安全な場所に鍵ファイルを保管してください。

Cloud SQL Auth Proxy をダウンロードしてインストールする

Linux 64 ビット

  1. Cloud SQL Auth Proxy をダウンロードします。
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. Cloud SQL Auth Proxy を動作可能にします。
    chmod +x cloud_sql_proxy
    

Linux 32 ビット

  1. Cloud SQL Auth Proxy をダウンロードします。
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. Cloud SQL Auth Proxy を動作可能にします。
    chmod +x cloud_sql_proxy
    

macOS 64 ビット

  1. Cloud SQL Auth Proxy をダウンロードします。
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. Cloud SQL Auth Proxy を動作可能にします。
    chmod +x cloud_sql_proxy
    

macOS 32 ビット

  1. Cloud SQL Auth Proxy をダウンロードします。
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. Cloud SQL Auth Proxy を動作可能にします。
    chmod +x cloud_sql_proxy
    

Windows 64 ビット

https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe を右クリックして [名前を付けてリンク先を保存] を選択し、Cloud SQL Auth Proxy をダウンロードします。ファイル名を cloud_sql_proxy.exe に変更します。

Windows 32 ビット

https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe を右クリックして [名前を付けてリンク先を保存] を選択し、Cloud SQL Auth Proxy をダウンロードします。ファイル名を cloud_sql_proxy.exe に変更します。

Cloud SQL Auth Proxy Docker イメージ

便宜上、Cloud SQL チームは、お客様が使用する Cloud SQL Auth Proxy を含むいくつかのコンテナ イメージを保持しています。これらのイメージの詳細については、GitHub の Cloud SQL Auth Proxy リポジトリをご覧ください。次のコマンドを使用して、最新のイメージをローカルマシンに Docker で pull できます。
docker pull gcr.io/cloudsql-docker/gce-proxy:1.19.1

その他の OS

ここに記載されていないその他のオペレーティング システムの場合は、ソースから Cloud SQL Auth Proxy をコンパイルできます。

Cloud SQL Auth Proxy の起動

言語や環境に応じて、TCP ソケット、Unix ソケット、または Cloud SQL Auth Proxy Docker イメージを使用して Cloud SQL Auth Proxy を起動できます。Cloud SQL Auth Proxy バイナリは、コマンドラインで指定された 1 つ以上の Cloud SQL インスタンスに接続し、TCP または Unix ソケットとしてローカル接続をオープンします。アプリケーション コードやデータベース管理クライアント ツールなど、他のアプリケーションやサービスは、これらの TCP または Unix ソケットの接続を介して Cloud SQL インスタンスに接続できます。

TCP ソケット

TCP 接続の場合、Cloud SQL Auth Proxy は、デフォルトでは localhost127.0.0.1)でリッスンします。したがって、インスタンスに tcp:PORT_NUMBER を指定すると、ローカル接続は 127.0.0.1:PORT_NUMBER になります。

また、ローカル接続に別のアドレスを指定することもできます。たとえば、ローカル接続用に Cloud SQL Auth Proxy が 0.0.0.0:1234 でリッスンする方法を次に示します。

  ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:1234
  1. INSTANCE_CONNECTION_NAME をコピーします。これは、Google Cloud Console のインスタンスの [概要] ページで確認できます。また、次のコマンドを実行して確認することもできます。

    gcloud sql instances describe INSTANCE_NAME

    例: myproject:myregion:myinstance

  2. インスタンスにパブリック IP とプライベート IP の両方が構成されている場合に、Cloud SQL Auth Proxy によってプライベート IP アドレスが使用されるようにするには、Cloud SQL Auth Proxy の起動時に次のオプションを指定する必要があります。
    -ip_address_types=PRIVATE
  3. サービス アカウントを使用して Cloud SQL Auth Proxy を認証する場合は、サービス アカウントを作成したときに作成された秘密鍵ファイルのクライアント マシン上での場所を記録しておきます。
  4. Cloud SQL Auth Proxy を起動します。

    有効な Cloud SQL Auth Proxy の呼び出し文字列:

    • Cloud SDK 認証を使用する場合
      ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:5432
      
      指定されたポートは、ローカル データベース サーバーなどがまだ使用していないものにする必要があります。
    • サービス アカウントを使用して、インスタンス接続の名前を明示的に指定する場合(本番環境用に推奨):
      ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAM=tcp:5432 \
                        -credential_file=PATH_TO_KEY_FILE &
      

    Cloud SQL Auth Proxy オプションの詳細については、Cloud SQL Auth Proxy を認証するためのオプションインスタンスを指定するためのオプションをご覧ください。

Unix ソケット

Cloud SQL Auth Proxy は Unix ソケットでリッスンできます。これは、フォルダを使用して同じホスト上で動作している 2 つのプロセス間の通信を管理するための Posix 標準のメカニズムです。Unix ソケットを使用する利点は、セキュリティが向上し、レイテンシが低くなることです。ただし、外部マシンから Unix ソケットにはアクセスできません。

Unix ソケットを作成して使用するには、ターゲット ディレクトリが存在し、Cloud SQL Auth Proxy とアプリケーションの両方に読み取りと書き込みのアクセス権が付与されている必要があります。

  1. 明示的なインスタンス指定を使用する場合は、INSTANCE_CONNECTION_NAME をコピーします。これは、Google Cloud Console のインスタンスの [概要] ページで確認できます。また、次のコマンドを実行して確認することもできます。

    gcloud sql instances describe INSTANCE_NAME

    例: myproject:myregion:myinstance

  2. Cloud SQL Auth Proxy ソケットを格納するディレクトリを作成します。
    sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
  3. サービス アカウントを使用して Cloud SQL Auth Proxy を認証する場合は、サービス アカウントを作成したときに作成された秘密鍵ファイルのクライアント マシン上での場所を記録しておきます。
  4. 新しいターミナル ウィンドウを開き、Cloud SQL Auth Proxy を起動します。

    有効な Cloud SQL Auth Proxy の呼び出し文字列:

    • サービス アカウントを使用して、インスタンス接続の名前を明示的に指定する場合(本番環境用に推奨):
      ./cloud_sql_proxy -dir=/cloudsql -instances=INSTANCE_CONNECTION_NAME
      -credential_file=PATH_TO_KEY_FILE &
    • Cloud SDK 認証と自動インスタンス検出を使用する場合:
      ./cloud_sql_proxy -dir=/cloudsql &

    専用のターミナルで Cloud SQL Auth Proxy を起動することを強くおすすめします。こうすることで、他のプログラムからの出力と混ざることなく出力をモニタリングできます。

    Cloud SQL Auth Proxy オプションの詳細については、Cloud SQL Auth Proxy を認証するためのオプションインスタンスを指定するためのオプションをご覧ください。

Cloud SQL Auth Proxy Docker イメージ

Docker コンテナで Cloud SQL Auth Proxy を動作させるには、Google Container Registry から入手できる Cloud SQL Auth Proxy Docker イメージを使用します。

次のコマンドで、TCP ソケットまたは Unix ソケットのどちらかを使用して、Cloud SQL Auth Proxy を起動できます。このオプションは、Cloud SQL インスタンスを識別するための接続文字列として INSTANCE_CONNECTION_NAME を使用します。INSTANCE_CONNECTION_NAME は、Google Cloud Console のインスタンスの [概要] ページに表示されます。また、次のコマンドを実行して確認することもできます。

gcloud sql instances describe INSTANCE_NAME
.

例: myproject:myregion:myinstance

言語や環境に応じて、TCP ソケットまたは Unix ソケットのどちらかを使用して Cloud SQL Auth Proxy を起動できます。Unix ソケットは、Java プログラミング言語で作成されたアプリケーションや Windows 環境ではサポートされていません。

TCP ソケットの使用

docker run -d \\
  -v PATH_TO_KEY_FILE:/config \\
  -p 127.0.0.1:5432:5432 \\
  gcr.io/cloudsql-docker/gce-proxy:1.19.1 /cloud_sql_proxy \\
  -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:5432 -credential_file=/config

Compute Engine インスタンスによって提供される認証情報を使用している場合は、credential_file パラメータと -v PATH_TO_KEY_FILE:/config の行を含めないでください。

Cloud SQL Auth Proxy がローカルホストの外部に公開されないように、常に 127.0.0.1 に -p の接頭辞を指定します。インスタンス パラメータに含まれる「0.0.0.0」は、Docker コンテナの外側からポートにアクセスできるようにするために必要です。

Unix ソケットの使用

docker run -d -v /cloudsql:/cloudsql \\
  -v PATH_TO_KEY_FILE:/config \\
  gcr.io/cloudsql-docker/gce-proxy:1.19.1 /cloud_sql_proxy -dir=/cloudsql \\
  -instances=INSTANCE_CONNECTION_NAME -credential_file=/config

Compute Engine インスタンスによって提供される認証情報を使用している場合は、credential_file パラメータと -v PATH_TO_KEY_FILE:/config の行を含めないでください。

コンテナ最適化イメージを使用している場合は、/cloudsql の代わりに書き込み可能なディレクトリを使用します。たとえば、次のようにします。

-v /mnt/stateful_partition/cloudsql:/cloudsql

複数のインスタンスをカンマで区切って指定できます。また、Compute Engine メタデータを使用して接続対象のインスタンスを動的に決定することもできます。Cloud SQL Auth Proxy パラメータについての詳細をご覧ください。

その他のコマンドライン引数

これまでの例は最も一般的なユースケースを対象としていますが、Cloud SQL Auth Proxy にはコマンドライン引数で設定できる構成オプションが他にもあります。コマンドライン引数のヘルプについては、-help フラグを使用して最新のドキュメントをご覧ください。

./cloud_sql_proxy -help

Cloud SQL Auth Proxy コマンドライン オプションの使用方法のその他の例については、Cloud SQL Auth Proxy GitHub リポジトリの README をご覧ください。

Cloud SQL Auth Proxy に接続する

使用する接続文字列は、TCP ソケット、Unix ソケット、Docker のいずれを使用して Cloud SQL Auth Proxy を開始したかによって異なります。

TCP ソケット

  1. mysql クライアントを起動します。
    psql "host=127.0.0.1 sslmode=disable dbname=DB_NAME user=USERNAME"
    

    sslmode パラメータが disable に設定されていても、Cloud SQL Auth Proxy では暗号化された接続が提供されます。

    TCP ソケットを使用して接続する場合、Cloud SQL Auth Proxy には 127.0.0.1 経由でアクセスします。

  2. プロンプトが表示されたら、パスワードを入力します。
  3. MySQL プロンプトが表示されます。

Unix ソケットの使用

  1. mysql クライアントを起動します。
    psql "sslmode=disable host=/cloudsql/INSTANCE_CONNECTION_NAME user=USERNAME"
    

    sslmode パラメータが disable に設定されていても、Cloud SQL Auth Proxy では暗号化された接続が提供されます。

  2. パスワードを入力します。
  3. MySQL プロンプトが表示されます。

お困りの場合、プロキシのトラブルシューティングについては、Cloud SQL Auth Proxy 接続のトラブルシューティングまたは Cloud SQL のサポートページをご覧ください。

言語別のコードサンプル

Unix または TCP ソケットに接続できる任意の言語を使用して、Cloud SQL Auth Proxy に接続できます。アプリケーションでどのように連携するのかを把握できるように、GitHub の詳細な例からコード スニペットをいくつか紹介します。

その他のトピック

プライベート IP での Cloud SQL Auth Proxy の使用

プライベート IP を使用して Cloud SQL インスタンスに接続するには、Cloud SQL Auth Proxy が、そのインスタンスと同じ VPC ネットワークにアクセスできるリソース上に存在する必要があります。

Cloud SQL Auth Proxy は、IP を使用して Cloud SQL インスタンスとの接続を確立します。デフォルトでは、Cloud SQL Auth Proxy は、パブリック IPv4 アドレスを使用して接続を試行します。Cloud SQL インスタンスにプライベート IP しかない場合、Cloud SQL Auth Proxy は、プライベート IP アドレスを使用して接続します。

インスタンスにパブリック IP とプライベート IP の両方が構成されている場合に、Cloud SQL Auth Proxy によってプライベート IP アドレスが使用されるようにするには、Cloud SQL Auth Proxy の起動時に次のオプションを指定する必要があります。

-ip_address_types=PRIVATE

別のプロセスでの Cloud SQL Auth Proxy の実行

Cloud SQL Auth Proxy を別のターミナル プロセスで実行することはコンソール出力と他のプログラムからの出力が混在するのを回避するうえで有用な可能性があります。以下の構文を使用して、別のプロセスで Cloud SQL Auth Proxy を呼び出します。

Linux

Linux または macOS の場合、コマンドラインで末尾の & を使用して Cloud SQL Auth Proxy を別のプロセスで起動します。

./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:PORT_NUMBER
  -credential_file=PATH_TO_KEY_FILE &

Windows

Windows PowerShell で、Start-Process コマンドを使用して、別のプロセスで Cloud SQL Auth Proxy を起動します。

Start-Process -filepath "cloud_sql_proxy.exe"
  -ArgumentList "-instances=INSTANCE_CONNECTION_NAME=tcp:PORT_NUMBER
  -credential_file=PATH_TO_KEY_FILE"

Docker コンテナでの Cloud SQL Auth Proxy の実行

Docker コンテナで Cloud SQL Auth Proxy を動作させるには、Google Container Registry から入手できる Cloud SQL Auth Proxy Docker イメージを使用します。Cloud SQL Auth Proxy Docker イメージは、次の gcloud コマンドを使用してインストールできます。

docker pull gcr.io/cloudsql-docker/gce-proxy:1.19.1

次のコマンドで、TCP ソケットまたは Unix ソケットのどちらかを使用して、Cloud SQL Auth Proxy を起動できます。

TCP ソケット

    docker run -d \
      -v PATH_TO_KEY_FILE:/config \
      -p 127.0.0.1:5432:5432 \
      gcr.io/cloudsql-docker/gce-proxy:1.19.1 /cloud_sql_proxy \
      -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:5432 \
      -credential_file=/config

Unix ソケット

    docker run -d \
      -v /PATH_TO_HOST_TARGET:/PATH_TO_GUEST_TARGET \
      -v PATH_TO_KEY_FILE:/config \
      gcr.io/cloudsql-docker/gce-proxy:1.19.1 /cloud_sql_proxy -dir=/cloudsql \
      -instances=INSTANCE_CONNECTION_NAME
      -credential_file=/config/PATH_TO_KEY_FILE

コンテナ最適化イメージを使用している場合は、/cloudsql の代わりに書き込み可能なディレクトリを使用します。たとえば、次のようにします。

-v /mnt/stateful_partition/cloudsql:/cloudsql

Compute Engine インスタンスによって提供される認証情報を使用している場合は、credential_file パラメータと -v PATH_TO_KEY_FILE:/config の行を含めないでください。

Cloud SQL Auth Proxy をサービスとして動作させる

Cloud SQL Auth Proxy をバックグラウンド サービスとして実行すると、ローカルでの開発とテストに役立ちます。Cloud SQL インスタンスにアクセスする必要がある場合は、バックグラウンドでサービスを開始し、終了したらサービスを停止できます。

  • Cloud SQL Auth Proxy には現在、Windows サービスとして動作する組み込みのサポートはありませんが、サードパーティのサービス マネージャーを使用することで、サービスとしての動作が可能です。たとえば、NSSM を使用して Cloud SQL Auth Proxy を Windows のサービスとして構成できます。NSSM が Cloud SQL Auth Proxy をモニタリングし、応答しなくなった場合は自動的に再起動します。詳細については、NSSM のドキュメントをご覧ください。

Cloud SQL Auth Proxy の使用に関するヒント

Cloud SQL Auth Proxy の呼び出し

プロキシ呼び出し例はすべてバックグラウンドで Cloud SQL Auth Proxy を起動し、プロンプトが返されます。その出力が他のプログラムからの出力と混在しないように、Cloud SQL Auth Proxy 用にターミナルを取っておくことを推奨します。また、Cloud SQL Auth Proxy からの出力は接続の問題を診断する際に役立つため、ログファイルに記録しておくことをおすすめします。Cloud SQL Auth Proxy をバックグラウンドで起動しない場合、リダイレクトしなければ stdout に出力されます。

Cloud SQL Auth Proxy ソケットのディレクトリとして /cloudsql を使用する必要はありません。(このディレクトリ名は、App Engine の接続文字列との相違を最小限に抑えるために選択されたものです)。ただし、ディレクトリ名を変更する場合は、全体の長さを最小限に保ってください。ディレクトリ名は、さらに長い文字列に組み込まれ、オペレーティング システムの長さ上限が適用されます。システムによって異なりますが、通常は 91~108 文字です。Linux では、この長さが通常 108 文字と定義され、次のコマンドで確認できます。

cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"

Cloud SQL Auth Proxy を使用した複数のインスタンスへの接続

1 つのローカル Cloud SQL Auth Proxy クライアントを使用して、複数の Cloud SQL インスタンスに接続できます。これを行う方法は、Unix ソケットまたは TCP のどちらを使用しているかによって異なります。

Unix ソケット

Cloud SQL Auth Proxy を複数のインスタンスに接続するには、インスタンス接続名をカンマ区切りのリスト(スペースなし)で、-instances パラメータ付きで指定します。Cloud SQL Auth Proxy は、起動時に各インスタンスに接続します。

指定されたディレクトリ内のソケットを使用して各インスタンスに接続します。

例:

      ./cloud_sql_proxy -dir=/cloudsql -instances=myProject:us-central1:myInstance,myProject:us-central1:myInstance2 &
      psql -U myUser -h /cloudsql/myProject:us-central1:myInstance2
  

TCP ソケット

TCP を使用して接続する場合は、Cloud SQL Auth プロキシが Cloud SQL インスタンスごとにリッスンするマシン上のポートを指定します。複数の Cloud SQL インスタンスに接続する場合は、指定された各ポートが一意であり、マシンで使用できる必要があります。

例:

    # Start the Cloud SQL Auth proxy to connect to two different Cloud SQL instances
    # Give the Cloud SQL Auth proxy a unique port on your machine to use for each Cloud SQL instance.

    ./cloud_sql_proxy -instances=myProject:us-central1:myInstance=tcp:5432,myProject:us-central1:myInstance2=tcp:1234

    # Connect to "myInstance" using port 5432 on your machine:
    psql -U myUser -h 127.0.0.1  --port 5432

    # Connect to "myInstance2" using port 1234 on your machine:
    psql -U myUser -h 127.0.0.1  --port 1234
  

Cloud SQL Auth Proxy の呼び出しと MySQL クライアントの接続文字列

Cloud SQL Auth Proxy の呼び出しと接続文字列は、例えば myProject プロジェクトの us-central1 にある myInstance インスタンスの MySQL ユーザー myUser に対するコマンドで使用できます。

自動インスタンス検出と gcloud 認証情報を使用する場合:
    ./cloud_sql_proxy -dir=/cloudsql &
    psql -U myUser -h /cloudsql/myProject:us-central1:myInstance
 
プロジェクト検出と gcloud 認証情報を使用する場合:
    ./cloud_sql_proxy -dir=/cloudsql -projects=myProject &
    psql -U myUser -h /cloudsql/myProject:us-central1:myInstance
Compute Engine インスタンスでインスタンスを明示的に指定する場合:
    ./cloud_sql_proxy -dir=/cloudsql -instances=myProject:us-central1:myInstance &
    psql -U myUser -h /cloudsql/myProject:us-central1:myInstance
Unix で TCP を使用する場合:
    ./cloud_sql_proxy -instances=myProject:us-central1:myInstance=tcp:5432 &
    psql -U myUser -h 127.0.0.1
Windows の場合(コマンドライン プロンプト):
    cloud_sql_proxy.exe -instances=myProject:us-central1:myInstance=tcp:5432
    psql -U myUser -h 127.0.0.1

Cloud SQL Auth Proxy のオプションと接続文字列の詳細については、Cloud SQL Auth Proxy GitHub ページをご覧ください。

Cloud SQL Auth Proxy 接続のトラブルシューティング

Cloud SQL Auth Proxy Docker イメージは、Cloud SQL Auth Proxy の特定のバージョンに基づいています。Cloud SQL Auth Proxy の新しいバージョンが利用可能になったら、Cloud SQL Auth Proxy Docker イメージの新しいバージョンを pull して、環境を最新の状態に保ってください。Cloud SQL Auth Proxy の最新バージョンは Cloud SQL Auth Proxy GitHub リリースページで確認できます。

Cloud SQL Auth Proxy を使用した Cloud SQL インスタンスへの接続の問題が発生した場合は、原因を特定するため、以下の点を確認してください。

  • Cloud SQL Auth Proxy の出力を確認します。

    Cloud SQL Auth Proxy の出力は、多くの場合、問題の原因と解決方法を判断するのに役立ちます。出力をファイルに保存するか、Cloud SQL Auth Proxy を起動したターミナルを確認してください。

  • 403 notAuthorized エラーが発生し、サービス アカウントを使用して Cloud SQL Auth Proxy を認証する場合は、サービス アカウントに正しい権限が付与されていることを確認します。

    サービス アカウントを確認するには、IAM ページでその ID を検索します。cloudsql.instances.connect 権限が必要です。この権限は、事前定義ロールの Cloud SQL AdminClientEditor に含まれています。

  • App Engine から接続する際に 403 notAuthorized エラーが発生した場合は、app.yaml の値 cloud_sql_instances にスペルミスや不正なインスタンス接続名がないか確認してください。インスタンス接続名は常に PROJECT:REGION:INSTANCE の形式です。

    また、App Engine サービス アカウント(たとえば、$PROJECT_ID@appspot.gserviceaccount.com)に Cloud SQL クライアント IAM ロールがあることを確認します。

    App Engine サービスが 1 つのプロジェクト(プロジェクト A)に存在し、データベースは別のプロジェクト(プロジェクト B)にある場合、このエラーは、App Engine サービス アカウントには、そのデータベース(プロジェクト B)があるプロジェクトにおいて Cloud SQL クライアント IAM のロールが付与されていないことを意味します。

  • 必ず Cloud SQL Admin API を有効にしてください。

    有効になっていない場合は、Cloud SQL Auth Proxy に Error 403: Access Not Configured のような出力が含まれています。

  • インスタンス リストに複数のインスタンスを含めている場合は、区切り記号としてカンマを使用していることを確認します。TCP を使用している場合は、インスタンスごとに異なるポートを指定していることを確認してください。

  • UNIX ソケットを使用して接続している場合は、Cloud SQL Auth Proxy の起動時に指定したディレクトリを一覧表示して、ソケットが作成されていることを確認します。

  • 送信ファイアウォール ポリシーがある場合は、ターゲット Cloud SQL インスタンス上のポート 3307 への接続が許可されていることを確認してください。

  • Google Cloud Console の [オペレーション] > [ロギング] > [ログ エクスプローラ] でログを調べることで、Cloud SQL Auth プロキシが正しく開始されていることを確認できます。正常なオペレーションは次のようになります。

    2021/06/14 15:47:56 Listening on /cloudsql/$PROJECT_ID:$REGION:$INSTANCE_NAME/5432 for $PROJECT_ID:$REGION:$INSTANCE_NAME
    2021/06/14 15:47:56 Ready for new connections
    
  • 割り当ての問題: Cloud SQL Admin API の割り当てに違反していると、Cloud SQL Auth プロキシは次のエラー メッセージで起動します。

    There was a problem when parsing a instance configuration but ignoring due
    to the configuration. Error: googleapi: Error 429: Quota exceeded for quota
    metric 'Queries' and limit 'Queries per minute per user' of service
    'sqladmin.googleapis.com' for consumer 'project_number:$PROJECT_ID.,
    rateLimitExceeded
    

    アプリケーションがプロキシに接続すると、プロキシから次のエラーが報告されます。

    failed to refresh the ephemeral certificate for $INSTANCE_CONNECTION_NAME:
    googleapi: Error 429: Quota exceeded for quota metric 'Queries' and limit
    'Queries per minute per user' of service 'sqladmin.googleapis.com' for
    consumer 'project_number:$PROJECT_ID., rateLimitExceeded
    

    解決策: 割り当ての問題の原因(たとえば、アプリケーションがコネクタを誤って使用していて、不要な新しい接続を作成している場合があります)を特定するか、サポートに連絡して Cloud SQL Admin API 割り当ての増加をリクエストします。起動時に割り当てエラーが発生した場合は、アプリケーションを再デプロイしてプロキシを再起動する必要があります。起動後に割り当てエラーが発生した場合、再デプロイは必要ありません。

次のステップ