Cloud SQL コネクタを使用した接続

Cloud SQL コネクタは、Cloud SQL インスタンスへの接続時に暗号化と IAM ベースの承認を提供するライブラリです。Cloud SQL インスタンスへのネットワーク パスがまだ存在しない場合に、ネットワーク パスを提供することはできません。

Cloud SQL インスタンスに接続するその他の方法には、データベース クライアントの使用または Cloud SQL Auth Proxy があります。Cloud SQL インスタンスへの接続に関する詳細については、接続の概要をご覧ください。

このページでは、次の Cloud SQL コネクタについて説明します。

  • Cloud SQL Java コネクタ
  • Cloud SQL Python コネクタ

始める前に

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

設定

Java

Cloud SQL Java コネクタは、Cloud SQL インスタンスへの接続時に IAM ベースの認可と暗号化を提供するライブラリです。Cloud SQL インスタンスへのネットワーク パスがまだ存在しない場合、ネットワーク パスを提供することはできません。

インストール

JDBC と R2DBC のドライバを Cloud SQL Java コネクタで構築して使用する方法については、次のリンク先をご覧ください。

JDBC: JDBC を使用した Postgres への接続

R2DBC: R2DBC を使用した Postgres への接続

このライブラリがアプリケーションのコンテキストでどのように使用されるかについては、サンプル アプリケーションをご覧ください。

認証

このライブラリは、アプリケーションのデフォルト認証情報を使用して Cloud SQL サーバーへの接続を認証します。

認証情報をローカルで有効にするには、次の gcloud コマンドを使用します。

    gcloud auth application-default login
    

Intellij との接続

Cloud SQL インスタンスに IntelliJ を接続するためには、ドライバ設定ページの追加のファイルセクションで、ライブラリを依存関係のある jar として追加する必要があります。たとえば、事前にビルドされた fat jar は Cloud SQL Java コネクタのリリースページに表示されます。

Python

Cloud SQL Python コネクタはデータベース ドライバとともに使用できるライブラリです。これにより、十分な権限があるユーザーは IP を手動で許可リストに登録することなく、Cloud SQL データベースに接続できるようになります。SSL 証明書を管理する必要もありません。

現在サポートされている MySQL のドライバは pg8000 です。

インストール

最新のリリースをインストールする方法については、こちらの手順をご覧ください。

認証

このライブラリは、アプリケーションのデフォルト認証情報を使用して Cloud SQL サーバーへの接続を認証します。

認証情報をローカルで有効にするには、次の gcloud コマンドを使用します。

    gcloud auth application-default login
    

用途

Java

このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。

// Note: For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections
// which is preferred to using the Cloud SQL Proxy with Unix sockets.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.

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

// The following URL is equivalent to setting the config options below:
// jdbc:postgresql:///<DB_NAME>?cloudSqlInstance=<CLOUD_SQL_CONNECTION_NAME>&
// socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<DB_USER>&password=<DB_PASS>
// See the link below for more info on building a JDBC URL for the Cloud SQL JDBC Socket Factory
// https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory#creating-the-jdbc-url

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

config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);

// The ipTypes argument can be used to specify a comma delimited list of preferred IP types
// for connecting to a Cloud SQL instance. The argument ipTypes=PRIVATE will force the
// SocketFactory to connect with an instance's associated private IP.
config.addDataSourceProperty("ipTypes", "PUBLIC,PRIVATE");

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

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);

Python

ライブラリの使用方法の詳細については、コネクタの使用方法をご覧ください。GitHub で、接続テストのコード例を確認してください。

# The Cloud SQL Python Connector can be used along with SQLAlchemy using the
# 'creator' argument to 'create_engine'
def init_connection_engine() -> sqlalchemy.engine.Engine:
    def getconn() -> pg8000.dbapi.Connection:
        conn: pg8000.dbapi.Connection = connector.connect(
            os.environ["POSTGRES_CONNECTION_NAME"],
            "pg8000",
            user=os.environ["POSTGRES_USER"],
            password=os.environ["POSTGRES_PASS"],
            db=os.environ["POSTGRES_DB"],
        )
        return conn

    engine = sqlalchemy.create_engine(
        "postgresql+pg8000://",
        creator=getconn,
    )
    engine.dialect.description_encoding = None
    return engine

トラブルシューティング

ファイアウォール構成

Cloud SQL Auth プロキシは、ポート 3307 を使用して Cloud SQL インスタンスへの接続を確立します。ファイアウォールで保護されているアプリケーションを、TCP ポート 3307 での送信接続を許可するように構成する必要があります。ファイアウォールによって接続がブロックされると、通常、接続の失敗を示すエラーになります。例: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

ドライバのバージョン

非互換性の問題を回避するため、最新バージョンの Cloud SQL コネクタとデータベース ドライバを使用してください。一部の古いバージョンのドライバはサポートされていません。

接続パス

Cloud SQL コネクタは接続の承認を提供しますが、接続するための新しいパスを提供しません。たとえば、プライベート IP アドレスを使用して Cloud SQL インスタンスに接続するには、アプリケーションがすでに VPC にアクセスできる必要があります。パブリック IP アドレスを使用して Cloud SQL インスタンスに接続するには、アプリケーションが承認済みネットワーク内にある必要があります。

接続の問題のデバッグ

接続の問題については、トラブルシューティング接続の問題のデバッグのページをご覧ください。

次のステップ