外部アプリケーションから Cloud SQL に接続する

このページでは、Google Cloud Platform の外部で実行されるアプリケーションから Cloud SQL への接続を確立する方法について説明します。

Cloud SQL への接続に関するさまざまなオプションについては、外部アプリケーション用の接続オプションをご覧ください。パブリック IP の構成方法については、パブリック IP を構成するをご覧ください。

データベース接続は、サーバーと接続元アプリケーションのリソースを消費します。アプリケーションのフットプリントを最小限に抑え、Cloud SQL の接続制限を超える可能性を少なくするには、常に適切な接続管理方法を使用してください。詳細については、データベース接続の管理をご覧ください。

準備

アプリケーションへのアクセスを付与しても、データベース ユーザー アカウントがインスタンスに自動的に接続できるようになるわけではありません。インスタンスに接続するには、接続に使用できるデータベース ユーザー アカウントが必要です。新しいインスタンスの場合、デフォルトのユーザー アカウントを構成しておく必要があります。詳細

Cloud SQL インスタンスに接続するには、次の方法を使用できます。

プロキシを使用して外部アプリケーションから接続する

ローカルテスト環境用(本番環境用ではなく)に Cloud SQL Proxy を設定する場合は、これらの手順の代わりにプロキシ クイックスタートを使用してください。

Java または Go プログラミング言語を使用している場合、Cloud SQL Proxy を使用する以外の代替手段がいくつかあります。詳細

1. API を有効にする

Cloud SQL Admin API を有効にします。

APIを有効にする

2. ローカルマシンにプロキシ クライアントをインストールする

Linux 64 ビット

  1. プロキシをダウンロードします。
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. プロキシを実行できるようにします。
    chmod +x cloud_sql_proxy
    

Linux 32 ビット

  1. プロキシをダウンロードします。
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. プロキシを実行できるようにします。
    chmod +x cloud_sql_proxy
    

macOS 64 ビット

  1. プロキシをダウンロードします。
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. プロキシを実行できるようにします。
    chmod +x cloud_sql_proxy
    

macOS 32 ビット

  1. プロキシをダウンロードします。
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. プロキシを実行できるようにします。
    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. 認証方法で必要な場合は、サービス アカウントを作成する

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

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

  2. 必要に応じて、Cloud SQL インスタンスを含むプロジェクトを選択します。
  3. [サービス アカウントを作成] をクリックします。
  4. [サービス アカウントの作成] ダイアログで、わかりやすいサービス アカウント名を指定します。
  5. [役割] で、次のいずれかの役割を選択します。
    • [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 を検索します。

  6. 必要に応じて [サービス アカウント ID] を一意のわかりやすい値に変更して、後でこのサービス アカウントを簡単に見つけられるようにします。
  7. [新しい秘密鍵の提供] をクリックします。
  8. デフォルトのキータイプは JSON であり、この値を使用するのが適切です。
  9. [作成] をクリックします。

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

5. プロキシに対するインスタンスの指定方法を決定する

プロキシ インスタンス指定オプションの詳細については、こちらをご覧ください

6. プロキシを開始する

プロキシに渡すオプションは、前に選択した認証とインスタンス指定のオプションによって異なります。

言語や環境に応じて、TCP ソケットまたは Unix ソケットのどちらかを使用してプロキシを開始できます。

TCP ソケット

  1. [インスタンスの詳細] ページからインスタンス接続名をコピーします。

    例: myproject:us-central1:myinstance

  2. サービス アカウントを使用してプロキシを認証する場合は、サービス アカウントを作成したときに作成された秘密鍵ファイルのクライアント マシン上での場所を記録しておきます。
  3. プロキシを開始します。

    考えられるプロキシ呼び出し文字列を以下にいくつか示します。

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

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

Unix ソケット

  1. 明示的なインスタンス指定を使用する場合は、インスタンス接続名を [インスタンスの詳細] ページからコピーします。
  2. プロキシ ソケットを格納するディレクトリを作成します。
    sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
  3. サービス アカウントを使用してプロキシを認証する場合は、サービス アカウントを作成したときに作成された秘密鍵ファイルのクライアント マシン上での場所を記録しておきます。
  4. 新しいターミナル ウィンドウを開き、プロキシを開始します。

    考えられるプロキシ呼び出し文字列を以下にいくつか示します。

    • サービス アカウントと明示的なインスタンス指定を使用する場合(本番環境で推奨):
      ./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 インスタンスに接続するために必要なコードの文の細部は、使用する言語とフレームワークによって異なります。

プロキシに接続する方法は、Unix または TCP ソケット(プロキシの呼び出し方法に依存します)に接続する場合と同じです。

TCP ソケット

TCP ソケットでは、プロキシをローカルホストとして使用できます。

127.0.0.1:3306

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 認証を使用しています。実際の呼び出しステートメントは、認証方法やインスタンスの指定方法によって異なる場合があります。 詳細

PyMySQL と TCP

プロキシを呼び出します。

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306 &

接続ステートメント:

import pymysql
connection = pymysql.connect(host='127.0.0.1',
                             user='<USER>',
                             password='<PASSWORD>',
                             db='<DATABASE>')

PyMySQL と UNIX

プロキシを呼び出します。

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME> -dir=/cloudsql &

接続ステートメント:

import pymysql
connection = pymysql.connect(unix_socket='/cloudsql/' + <INSTANCE_CONNECTION_NAME>,
                             user='<USER>',
                             password='<PASSWORD>',
                             db='<DATABASE>')

SQLAlchemy と TCP

プロキシを呼び出します。

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306 &

接続ステートメント:

from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://<USER>:<PASSWORD>@127.0.0.1/<DATABASE>')

SQLAlchemy と Unix

プロキシを呼び出します。

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME> -dir=/cloudsql &

接続ステートメント:

from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://<USER>:<PASSWORD>@/<DATABASE>?unix_socket=/cloudsql/<INSTANCE_CONNECTION_NAME>')

Java

Java プログラミング言語では、UNIX ソケットのネイティブ サポートは提供されていません。TCP ソケット、または Cloud SQL Proxy との UNIX ソケット サポートを提供するライブラリを使用できますが、IP アドレスをホワイトリストに登録することなく第 2 世代インスタンスに接続する最も簡単な方法は、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/mysql"
)
...
cfg := mysql.Cfg(<INSTANCE_CONNECTION_NAME>, <DATABASE_USER>, <PASSWORD>)
cfg.DBName = <DATABASE_NAME>
db, err := mysql.DialCfg(cfg)

詳しくは、Cloud SQL Proxy の Github ページをご覧ください。

コンパニオン プロセス

また、プロキシをコンパニオン プロセスとして実行し、アプリケーションから接続することもできます。

わかりやすいように、このプロキシ呼び出しステートメントではローカル Cloud SDK 認証を使用しています。実際の呼び出しステートメントは、認証方法やインスタンスの指定方法によって異なる場合があります。 詳細

TCP

プロキシ呼び出しステートメント:

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306 &

接続ステートメント:

import (
       "database/sql"
        _ "github.com/go-sql-driver/mysql"
)

dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s",
       dbUser,
       dbPassword,
       "127.0.0.1:3306",
       dbName)
db, err := sql.Open("mysql", dsn)

Unix ソケット

プロキシ呼び出しステートメント:

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME> -dir=/cloudsql &

接続ステートメント:

import (
       "database/sql"
        _ "github.com/go-sql-driver/mysql"
)

dsn := fmt.Sprintf("%s:%s@unix(/cloudsql/%s)/%s",
       dbUser,
       dbPassword,
       INSTANCE_CONNECTION_NAME,
       dbName)
db, err := sql.Open("mysql", dsn)

パブリック IP 接続のアクセスを構成する

アプリケーションが接続に使用するパブリック IP アドレスを承認することで、Cloud SQL インスタンスへのアクセスをアプリケーションに許可できます。

承認済みネットワークとしてプライベート ネットワーク(10.x.x.x など)を指定することはできません。

第 2 世代インスタンスのパブリック IP アドレス:

  • IPv6: 第 2 世代インスタンスは IPv6 をサポートしていません。
  • IPv4: 第 2 世代インスタンスには静的 IPv4 アドレスが自動的に割り当てられます。インスタンスがオフ(非アクティブ)の間も常に、IP アドレスにわずかな料金がかかります。

第 1 世代インスタンスのパブリック IP アドレス:

第 1 世代インスタンスの場合、Cloud SQL は IPv4 と IPv6 の両方のアドレスでのパブリック IP 接続をサポートします。どちらか一方または両方のプロトコルを使用して接続できます。ただし、同じ接続に両方の IP アドレス バージョンを混在させることはできません。

  • IPv6: 第 1 世代インスタンスには、それぞれ静的 IPv6 アドレスが自動的に割り当てられます。自分でインスタンスに IPv6 アドレスを割り当てる必要はありません。
  • IPv4: 第 1 世代インスタンスに IPv4 で接続する場合は、インスタンスを更新してパブリック IPv4 アドレスを割り当てる必要があります。この IP アドレスは静的です。インスタンスがオフ(停止中)の間も常に、IPv4 アドレスにわずかな料金がかかります。

IP 接続によるアクセスを構成するには、次の手順を実行します。

Console

  1. アプリケーションの IP アドレスを確認します。 詳細
  2. アプリケーションの IP アドレスを承認して、インスタンスに接続します。

    詳しくは、承認されたアドレスを追加するをご覧ください。

  3. IPv4 で第 1 世代インスタンスに接続する場合、まだ行っていない場合は IPv4 アドレスをインスタンスに割り当てます。
    1. Google Cloud Platform Console で [Cloud SQL インスタンス] ページに移動します。

      [Cloud SQL インスタンス] ページに移動

    2. インスタンス名をクリックして [概要] ページを開きます。
    3. [IP アドレス] タブを選択します。
    4. [IPv4 アドレスをリクエスト] をクリックします。

      インスタンスがオフでも IPv4 アドレスに料金がかかることに注意してください。詳しくは料金のページをご覧ください。

  4. インスタンスに割り当てられた IP アドレスは [インスタンスの詳細] ページで確認できます。この値は、アプリケーションの接続文字列に必要となります。

gcloud

  1. クライアント マシンの IP アドレスを確認します。 詳細
  2. アプリケーションの IP アドレスを承認して、インスタンスに接続します。

    詳しくは、承認されたアドレスを追加するをご覧ください。

  3. IPv4 を使用して第 1 世代のインスタンスに接続するには、インスタンスに IPv4 アドレスを割り当てる必要があります。
    gcloud sql instances patch [INSTANCE_NAME] --assign-ip
    
  4. インスタンスの IP アドレスを取得します。
    gcloud sql instances describe [INSTANCE_NAME]
    

    出力の ipAddress フィールドを探します。この値は、アプリケーションの接続文字列に必要となります。

cURL

  1. アプリケーションの IP アドレスを確認します。 詳細
  2. アプリケーションの IP アドレスを承認して、インスタンスに接続します。

    詳しくは、承認されたアドレスを追加するをご覧ください。

  3. IPv4 を使用して第 1 世代のインスタンスに接続するには、インスタンスに IPv4 アドレスを割り当てる必要があります。
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
           --header 'Content-Type: application/json' \
           --data '{"settings" : {"ipConfiguration" :
                                  {"ipv4Enabled" : "true"}}}' \
           -X PATCH \
           https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]
    
  4. インスタンスの 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]
    

    ipv6Address の値(第 1 世代のインスタンスのみ)をメモします。IPv4 の場合は ipAddresses.ipAddress です。この値は、アプリケーションの接続文字列に必要となります。

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

IP アドレスが動的に割り当てられるアプリケーションのアクセスを構成する

一部のアプリケーションでは、動的に割り当てられる一時的な IP アドレスを使用して、Cloud SQL インスタンスに接続する必要があります。これは、特に Platform as a Service(Paas)アプリケーションの場合に該当します。

このようなアプリケーションのソリューションとして最適なのは、Cloud SQL の第 2 世代インスタンスを使用し、Cloud SQL Proxy を使用して接続する方法です。このソリューションでは、インスタンスに最善のアクセス制御が提供されます。

第 2 世代インスタンスを使用できない場合は、独自のプロキシをインストールするか、またはファイアウォールを開いて SSL を適用できます。ただし、どちらの場合も、第 2 世代インスタンスによって提供されるような接続ソリューションのセキュリティと制御は提供されません。

接続をテストする

mysql クライアントを使用して、ローカル環境からの接続状況をテストできます。詳細については、IP アドレスを使用して mysql クライアントを接続するCloud SQL Proxy を使用して mysql クライアントを接続するをご覧ください。

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

アプリケーションの IP アドレスを確認する

アプリケーションを実行しているパソコンの IP アドレスから Cloud SQL インスタンスへのアクセスを承認できるようにするため、そのパソコンの IP アドレスを確認するには、次のいずれかのオプションを使用します。

  • パソコンがプロキシの背後にない場合は、パソコンにログインし、このリンクを使用して IP アドレスを確認します。
  • パソコンがプロキシの背後にある場合は、パソコンにログインし、whatismyipaddress.com などのサービスやツールを使用して実際の IP アドレスを確認します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...