Cloud SQL Proxy について

ここでは、Cloud SQL Proxy の基本的な概要と、プロキシ オプションについて説明します。

Cloud SQL Proxy を使用する詳細な手順については、次のリンクからお使いの環境に該当するものをクリックしてください。

App Engine スタンダード環境から Cloud SQL に接続、または App Engine フレキシブル環境から Cloud SQL に接続するために、プロキシの使用や、SSL を構成する必要はありません。

プロキシの機能

Cloud SQL Proxy を使用すると、承認済みネットワークSSL の構成を必要とせず、安全にインスタンスへアクセスできます。

Cloud SQL Proxy を使用して Cloud SQL インスタンスにアクセスする利点は次のとおりです。

  • 安全な接続: プロキシは、TLS 1.2 と 128 ビット AES 暗号を使用して、データベースとの間で送受信されるトラフィックを自動的に暗号化します。クライアントとサーバーの ID の確認には、SSL 証明書が使用されます。
  • 簡単な接続管理: プロキシが Cloud SQL との認証を処理するので、静的な IP アドレスを提供する必要がなくなります。

プロキシは新しい接続パスを提供せず、既存の IP 接続を使用します。プライベート IP を使用して Cloud SQL インスタンスに接続するには、プロキシがそのインスタンスと同じ VPC ネットワークにアクセスできるリソース上にある必要があります。

Cloud SQL Proxy の仕組み

Cloud SQL Proxy は、プロキシと呼ばれるローカル クライアントをローカル環境で実行することによって機能します。アプリケーションは、データベースで使用されている標準のデータベース プロトコルを介してプロキシと通信します。プロキシは、セキュアなトンネルを使用して、サーバー上で実行されているコンパニオン プロセスと通信します。

プロキシはどのポートでもリッスンできますが、ポート 3307 にのみ Cloud SQL インスタンスへの送信接続が作成されます。送信ファイアウォール ポリシーがある場合は、Cloud SQL インスタンスの IP のポート 3307 への接続が許可されていることを確認してください。

次の図では、プロキシが Cloud SQL に接続する方法を示します。

クライアント ソフトウェアから SQL インスタンスに接続するプロキシの図

Cloud SQL Proxy を使用する際の要件

プロキシを使用するには、次の要件を満たしている必要があります。

  • Cloud SQL API が有効になっている必要があります。
  • プロキシに Google Cloud 認証情報を指定する必要があります。
  • プロキシに有効なデータベース ユーザー アカウントとパスワードを指定する必要があります。
  • インスタンスでパブリック IPv4 アドレスが指定されているか、プライベート IP を使用するように構成されている必要があります。

    パブリック IP アドレスがすべての外部アドレスからアクセス可能である必要はありません(承認済みネットワークのアドレスとして追加する必要はありません)。

プロキシの起動オプション

プロキシを起動するときに、次の情報をプロキシに提供します。

  • 接続先の Cloud SQL インスタンス
  • Cloud SQL へ送信するためにアプリケーションから受信するデータをリッスンする場所
  • Cloud SQL に対するアプリケーションの認証に使用する認証情報を取得できる場所
  • 使用する IP アドレスのタイプ(必要な場合)

指定したプロキシ スタートアップ オプションによって、TCP ポートと Unix ソケットのどちらでリッスンするのかが決まります。Unix ソケットでリッスンする場合は、選択した場所(通常は /cloudsql/ ディレクトリ)にソケットが作成されます。TCP の場合、プロキシはデフォルトで localhost をリッスンします。

引数 --help を指定して cloud_sql_proxy 実行可能ファイルを実行すると、起動オプションすべての一覧が表示されます。

プロキシは、ローカル環境の任意の場所にインストールできます。プロキシ バイナリの場所が、アプリケーションから受信するデータをリッスンする場所に影響することはありません。

認証でのサービス アカウントの使用

プロキシには認証が必要です。この目的でサービス アカウントを使用する利点は、プロキシ専用の認証情報ファイルを作成でき、実行中はプロキシに明示的かつ永続的にリンクされることです。このため、Compute Engine インスタンスで実行していない本番環境インスタンスには、サービス アカウントを使用することをおすすめします。

Cloud SQL Proxy を複数のマシンから呼び出す必要がある場合は、認証情報ファイルをシステム イメージで複製できます。

この方法を使用するには、認証情報ファイルを作成して管理する必要があります。resourcemanager.projects.setIamPolicy 権限を持つユーザー(プロジェクト オーナーなど)だけが、サービス アカウントを作成できます。Google Cloud ユーザーがこの権限を付与されていない場合は、別のユーザーにサービス アカウントの作成を依頼するか、別の方法でプロキシを認証する必要があります。

認証情報ファイルの作成に関するヘルプについては、サービス アカウントを作成するをご覧ください。

サービス アカウントに必要な権限

サービス アカウントを使用してプロキシの認証情報を提示する場合は、十分な権限が付与されたサービス アカウントを作成する必要があります。よりきめ細かい Identity Access and Management(IAM)のロールを使用して Cloud SQL 権限を管理する場合は、サービス アカウントに cloudsql.instances.connect 権限を含むロールを付与する必要があります。この権限を含む事前定義された Cloud SQL のロールは次のとおりです。

  • Cloud SQL クライアント
  • Cloud SQL 編集者
  • Cloud SQL 管理者

以前のプロジェクトの役割(閲覧者、編集者、オーナー)を使用する場合、サービス アカウントには少なくとも編集者の役割が付与されている必要があります。

Cloud SQL インスタンスを指定するためのオプション

プロキシに接続先のインスタンスを示すには複数の方法があります。明示的な方法と暗黙的な方法があります。一部の構成では、プロキシは接続リクエストに基づいて接続するため、事前に接続先インスタンスをプロキシに伝える必要はありません。

インスタンス指定のオプションは、オペレーティング システムと環境によって異なります。

オプション 利点 注意点と要件 Linux / macOS
(Unix ソケット)
Java Windows 備考
自動インスタンス検出 インスタンスを指定する必要はありません。デフォルト プロジェクト内のすべてのインスタンスに対してソケットが作成されます。 Proxy API の使用が増加します。Cloud SDK をインストールし、デフォルトのプロジェクト セットで認証する必要があります。新しいインスタンスを追加するには、プロキシの再起動が必要です。 対応 × × 本番環境インスタンスには推奨されません。
プロジェクト検出 インスタンスを指定する必要はありません。指定したプロジェクト内のすべてのインスタンスに対してソケットが作成されます。 Proxy API の使用が増加します。Cloud SDK をインストールして認証する必要があります。新しいインスタンスを追加するには、プロキシの再起動が必要です。 対応 × × -projects パラメータを使用します。本番環境インスタンスには推奨されません。
プロキシ呼び出しでのインスタンス指定 インスタンスのリストは既知で静的です。 新しいインスタンスを追加するには、プロキシの再起動が必要です。 対応 TCP ソケットで対応 TCP ソケットで対応 -instances パラメータを使用します。複数のインスタンスを指定する場合、スペースなしのカンマ区切りのリストを使用します。詳細
Compute Engine メタデータでのインスタンス指定 メタデータの値を変更することでインスタンス リストを更新でき、プロキシの再起動は必要ありません。 Compute Engine でのみ使用できます。 対応 TCP ソケットで対応 TCP ソケットで対応 -instances_metadata フラグを使用します。詳細については、こちらをご覧ください。

呼び出しと接続文字列の例をご覧ください

Cloud SQL Proxy の最新状態の維持

Google から新しいバージョンのプロキシが不定期にリリースされます。最新バージョンは Cloud SQL Proxy GitHub リリースページで確認できます。また、プロキシの今後のリリースについては、Google Groups Cloud SQL のお知らせフォーラムで通知されます。

API の使用

Cloud SQL Proxy は、Cloud SQL Admin API に対してリクエストを発行します。これらのリクエストは、プロジェクトの API 割り当て量にカウントされます。

API 使用率は、プロキシの起動時に最高値となります。これは特に、インスタンスの自動検出または -projects パラメータを使用している場合に顕著です。プロキシは実行中に、接続されているインスタンスごとに 1 時間あたり 2 つの API 呼び出しを発行します。

Cloud SQL Proxy のパラメータとフラグ

Cloud SQL Proxy は、起動時に複数のフラグとパラメータを受け取ります。これらのオプションにより、Cloud SQL Proxy が Cloud SQL との通信に使用するソケットを作成する場所と方法、および認証の方法が決まります。

プロキシのオプションについては、次の情報をご覧ください。

本番環境での Cloud SQL Proxy の使用

本番環境で Cloud SQL Proxy を使用している場合は、プロキシがアプリケーションに必要な可用性を確実に提供するように、以下の手順を実行してください。

Cloud SQL Proxy が永続サービスとして実行されていることの確認

プロキシ プロセスが停止すると、そのプロキシを介した既存の接続がすべて切断され、アプリケーションはそのプロキシを使用して Cloud SQL インスタンスへの接続を確立できなくなります。このようなシナリオを回避するには、プロキシがなんらかの理由で終了した場合に自動的に再起動されるように、プロキシを永続サービスとして実行します。このためには、systemdupstartsupervisor などのサービスを使用します。Windows オペレーティング システムの場合は、プロキシを Windows サービスとして実行します。通常、プロキシにはアプリケーション プロセスと同じ稼働時間要件があります。

アプリケーションに必要な Cloud SQL Proxy のコピー数

アプリケーション プロセスごとにプロキシ プロセスを作成する必要はありません。多くのアプリケーション プロセスで単一のプロキシ プロセスを共有できます。ワークステーションまたは仮想マシンごとに 1 つのプロキシ クライアント プロセスを実行します。

仮想マシンの自動スケーリングを使用している場合は、プロキシが仮想マシン構成に含まれており、新しい仮想マシンを起動するたびに独自のプロキシ プロセスが作成されることを確認してください。

接続を制限するかプールするかにかかわらず、アプリケーションに必要な接続数の管理はユーザーが行います。プロキシによって、新しい接続の作成頻度や永続的な接続の数が制限されることはありません。

Cloud SQL Proxy 出力の削減

プロキシログのサイズを小さくする必要がある場合は、プロキシの起動時に -verbose=false を設定します。ただし、ログのサイズを小さくすると、接続の問題を診断する際のプロキシ出力の有効性が低下するので注意してください。

フェイルオーバーが Cloud SQL Proxy に及ぼす影響

高可用性構成のインスタンスでプロキシを実行中にフェイルオーバーが発生した場合、プロキシ経由の接続は、IP 経由の接続と同様の影響を受けます。つまり、既存の接続がすべて失われるため、アプリケーションは新しい接続を確立する必要があります。ただし、手動による操作は必要ありません。アプリケーションは以前と同じ接続文字列を引き続き使用できます。

Proxy Docker イメージを最新状態に保つ

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

次のステップ