App Engine からの接続

ここでは、App Engine アプリケーションから Cloud SQL インスタンスに接続する方法を説明し、いくつかの例を紹介します。

Cloud SQL と App Engine の設定

Cloud SQL インスタンスまたは App Engine アプリケーションを設定する方法の詳細については、次の手順をご覧ください。

  • Cloud SQL インスタンスの接続名を識別する。これは、インスタンスごとに固有の文字列です。形式は <PROJECT_ID>:<REGION>:<INSTANCE_ID> となっています。接続名は、お使いのインスタンスの [インスタンスの詳細] ページに表示される [インスタンス接続名] で確認できます。gcloud sql instances describe <INSTANCE_ID> コマンドを使用する場合は、connectionName に示されます。

  • Cloud SQL インスタンスを含むプロジェクトで Cloud SQL Admin API が有効になっていることを確認する。

    APIを有効にする

パフォーマンスとレスポンス時間を最適化するには、アプリケーションで接続プールを使用する必要があります。接続プールの具体例については、データベース接続を管理するをご覧ください。

App Engine スタンダード環境を Cloud SQL に接続する

App Engine スタンダード環境には、Cloud SQL インスタンスに接続するための Unix ドメイン ソケットが用意されています。このソケットによる接続は、App Engine のデフォルト サービス アカウントを使用して自動的に承認されます。

このソケットは /cloudsql/INSTANCE_CONNECTION_NAME にあり、アプリケーションで直接使用できます。使用例については、以下をご覧ください。

Python

# The SQLAlchemy engine will help manage interactions, including automatically
# managing a pool of connections to your database
db = sqlalchemy.create_engine(
    # Equivalent URL:
    # mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>
    sqlalchemy.engine.url.URL(
        drivername='mysql+pymysql',
        username=db_user,
        password=db_pass,
        database=db_name,
        query={
            'unix_socket': '/cloudsql/{}'.format(cloud_sql_connection_name)
        }
    ),
    # ... Specify additional properties here.
    # ...
)
上記のスニペットをアプリケーションのコンテキストで確認するには、こちらでプロジェクト全体をご覧ください。

Java

// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();

// Configure which instance and what database user to connect with.
config.setJdbcUrl(String.format("jdbc:mysql:///%s", DB_NAME));
config.setUsername(DB_USER); // e.g. "root", "postgres"
config.setPassword(DB_PASS); // e.g. "my-password"

// For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);
config.addDataSourceProperty("useSSL", "false");

// ... Specify additional connection properties here.
// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);
上記のスニペットをアプリケーションのコンテキストで確認するには、こちらでプロジェクト全体をご覧ください。

App Engine フレキシブル環境を Cloud SQL に接続する

App Engine フレキシブル環境では、Unix ドメイン ソケットと TCP 接続のいずれかを使用した、Cloud SQL インスタンスへのセキュアな接続が可能です。

Unix ドメイン ソケット

用意されている Unix ソケットを有効にするには、プロジェクトの app.yaml に次のコードを追加します。
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME> 
これにより、アプリケーションは /cloudsql/<INSTANCE_CONNECTION_NAME> にある Unix ソケットを使用して Cloud SQL インスタンスに接続できるようになります。
複数の Cloud SQL インスタンスに接続する場合は、カンマ区切りのリストでインスタンス接続名を指定します。リストに含まれるインスタンスごとに、そのインスタンス接続名に基づく個別のソケットが作成されます。

TCP 接続

用意されている TCP ポートを有効にするには、プロジェクトの app.yaml に次のコードを追加します。
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT>
これにより、アプリケーションは TCP ポート(127.0.0.1:<TCP_PORT>)を使用して Cloud SQL インスタンスに接続できるようになります。
複数の Cloud SQL インスタンスに接続する場合は、カンマ区切りのリストでインスタンス接続名を指定します。インスタンスごとに別のローカルポートを使用する必要があります。

追加情報

異なるプロジェクトに属する App Engine と Cloud SQL

App Engine アプリケーションと Cloud SQL インスタンスがそれぞれ異なるプロジェクトに属する場合、App Engine のデフォルト サービス アカウント([PROJECT-ID]@appspot.gserviceaccount.com)に次のいずれかの IAM 役割を付与する必要があります。

  • Cloud SQL Client
  • Cloud SQL Editor
  • Cloud SQL Admin

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

おすすめの方法

App Engine から Cloud SQL に接続するときは、以下のおすすめの方法を念頭においてください。

  • App Engine には、負荷が増加したときに自動的にインスタンスを作成する機能があります。App Engine インスタンスの数が Cloud SQL インスタンスで処理可能なサイズを超えて増加した場合、Cloud SQL インスタンスは要求を満たすことができなくなります。この問題を回避するには、App Engine インスタンス数の上限を設定します。詳細については、要素のスケーリングをご覧ください。

  • データベース接続はリソースを消費します。アプリケーションでは接続の管理のおすすめの方法を適用して、必要な接続数を減らしてください。App Engine スタンダード環境では、App Engine インスタンスが Cloud SQL に対して開ける接続数にハードリミットが適用されます。

App Engine スタンダード環境を Cloud SQL 第 1 世代に接続する

第 1 世代の Cloud SQL インスタンスでは、App Engine スタンダード環境からの接続のみがサポートされています。また、接続には承認が必要となります。承認を付与するには、次の手順に従います。

Console

  1. Google Cloud Platform Console で Cloud SQL の [インスタンス] ページに移動します。

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

  2. インスタンス名をクリックして [インスタンスの詳細] ページを開きます。
  3. [接続] タブを選択します。
  4. [承認済みの App Engine Standard アプリケーション] セクションで、[プロジェクト ID を追加] をクリックし、承認するアプリケーションのプロジェクト ID を入力します。
  5. [完了] をクリックして編集モードを終了します。
  6. [保存] をクリックしてインスタンスを更新します。

gcloud

  1. インスタンスの既存の承認済みの App Engine プロジェクトを一覧表示します。
    gcloud sql instances describe [INSTANCE_NAME]
    
  2. sql instances patch コマンドを使用して、このインスタンスへのアクセスを許可するすべてのアプリケーションのプロジェクト ID を指定します。カンマを使用して複数の ID を区切ります。
    gcloud sql instances patch [INSTANCE_NAME] --authorized-gae-apps [GAE_APP_PROJECT_ID]
    

次のステップ

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

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