PGAdapter の概要

このページでは、PGAdapter の概要について説明します。PGAdapter を起動する方法については、PGAdapter の起動をご覧ください。

PGAdapter はサイドカー プロキシです。これは、メインのアプリケーションとともに実行され、Spanner の PostgreSQL Interface と Spanner 間の通信をサポートする小さなアプリケーションです。Java アプリケーションの場合は、別のプロセスで実行しなくても、PGAdapter をアプリケーションに直接リンクできます。PGAdapter は、アプリケーションと同じマシンで実行されるように設計されており、PostgreSQL ワイヤ プロトコルをサポートするローカルホストのエンドポイントを公開し、PostgreSQL ワイヤ プロトコルを Spanner ワイヤ プロトコル(gRPC)に変換します。このプロキシをローカルで実行すると、PostgreSQL クライアント(psql など)が PostgreSQL 言語の Spanner データベースに接続できます。

PGAdapter により、最大で 0.2 ミリ秒のレイテンシ オーバーヘッドが増加します。PostgreSQL Interface のレイテンシ レベルは GoogleSQL と同じです。

次の図は、psql が PGAdapter を介して Spanner に接続する方法を示しています。

psql は PGAdapter を介して Spanner に接続します

PGAdapter は、シンプルなクエリモードと拡張クエリモードをサポートし、Spanner の PostgreSQL Interface がサポートしているあらゆるデータ型をサポートします。

PGAdapter の実行環境

PGAdapter は、次のいずれかの方法で実行できます。

  • スタンドアロン: PGAdapter は JAR ファイルとして提供され、JVM でスタンドアロンで実行されます。
  • Docker: PGAdapter は Docker イメージとしてもパッケージ化されています。
  • Cloud Run: PGAdapter は、Cloud Run にサイドカー プロキシとしてデプロイできます。
  • サイドカー プロキシ: サイドカー プロキシの一般的な使用例は、Kubernetes クラスタです。
  • プロセス内: Java アプリケーション コードは、提供された JAR ファイルを使用して PGAdapter インスタンスを作成して起動できます。

これらのメソッドの詳細については、PGAdapter を起動するをご覧ください。

PGAdapter による認可

PGAdapter は、起動時に指定された認証情報を調べて、接続に使用するサービス アカウントまたは他の Identity and Access Management(IAM)プリンシパルを決定します。そのプリンシパルに付与された IAM 権限によって、接続するアプリケーションがデータベースに対して持つ権限が決定されます。

詳細なアクセス制御が使用されている場合は、必要に応じて PGAdapter の起動時にデータベース ロールを指定できます。データベース ロールを指定すると、PGAdapter はクエリと DML ステートメントのリクエストを送信するときにきめ細かいアクセス制御を使用します。これには、IAM 権限 spanner.databases.useRoleBasedAccess と、public 以外のデータベース ロールに対する spanner.databaseRoles.use 権限が必要です。データベース ロールに付与された権限によって、接続するアプリケーションが実行できるオペレーションが決定されます。データベース ロールを指定しない場合、IAM プリンシパルに付与されたデータベース レベルの権限が使用されます。DDL ステートメントを実行するには、プリンシパルに spanner.databases.updateDdl 権限が必要です。

詳細については、詳細なアクセス制御についてIAM によるアクセス制御をご覧ください。

次のステップ