このページでは、Private Service Connect を使用して AlloyDB for PostgreSQL インスタンスに接続する方法について説明します。
Private Service Connect を使用すると、異なるグループ、チーム、プロジェクト、組織に属する複数の Virtual Private Cloud(VPC)ネットワークから、プライマリ AlloyDB インスタンスまたはそのリードレプリカ、またはセカンダリ AlloyDB インスタンスのいずれかに接続できます。
必要なロール
AlloyDB インスタンスに接続するには、VPC ネットワーク内のユーザーに次のロールをすべて付与する必要があります。
ロール | 説明 |
---|---|
compute.networkAdmin |
AlloyDB インスタンスへの接続を開始する VPC ネットワークを完全に制御できる権限を付与します。Private Service Connect を使用して複数の VPC ネットワークから AlloyDB インスタンスに接続する場合、各ネットワークには独自の管理者が存在します。 |
dns.admin |
DNS ゾーンやレコードなど、Cloud DNS リソースに対する完全な制御権を付与します。 |
alloydb.admin |
AlloyDB インスタンスを完全に制御し、インスタンスのライフサイクルを制御します。 |
alloydb.databaseUser (省略可) |
AlloyDB インスタンスへのアクセスを提供します。AlloyDB Auth Proxy クライアントを介して接続する場合は、AlloyDB クライアントのロールが必要です。直接接続する場合、Identity and Access Management(IAM)のロールと権限は必要ありません。 |
Private Service Connect を有効にする
Private Service Connect を有効にするには、Private Service Connect が構成された AlloyDB クラスタを作成し、許可されたプロジェクトのリストを含む AlloyDB インスタンスを作成します。
AlloyDB プライマリ クラスタを作成する
次の例では、--enable-private-service-connect
フラグを指定した gcloud alloydb clusters create
コマンドを使用して、Private Service Connect が有効になっている AlloyDB クラスタを作成します。
クラスタの作成プロセスは、--enable-private-service-connect
フラグを渡すことを除き、同じです。クラスタの作成の詳細については、クラスタとそのプライマリ インスタンスを作成するをご覧ください。
クラスタを作成するには、gcloud alloydb clusters
create
コマンドを使用します。
gcloud alloydb clusters create CLUSTER_ID \
--password=PASSWORD \
--region=REGION_ID \
--project=PROJECT_ID \
--enable-private-service-connect
次のように置き換えます。
CLUSTER_ID
: 作成するクラスタの ID。先頭は英小文字にします。英小文字、数字、ハイフンを使用できます。PASSWORD
: デフォルトのpostgres
ユーザーに使用するパスワード。REGION_ID
: クラスタを配置するリージョン。PROJECT_ID
: クラスタを配置するプロジェクトの ID。
このコマンドは、長時間実行オペレーションを開始し、オペレーション ID を戻します。
Private Service Connect が有効になっているプライマリ クラスタ用に作成されたセカンダリ クラスタは、Private Service Connect 構成を自動的に継承します。詳細については、セカンダリ クラスタを作成するをご覧ください。
AlloyDB インスタンスを作成する
次の例は、許可されたプロジェクトのリストが構成されたプライマリ インスタンスを作成する方法を示しています。インスタンスの作成プロセスは同じですが、Private Service Connect が有効なプライマリ クラスタの場合は、--allowed-psc-projects
フラグを使用して許可されたプロジェクトのリストを渡します。
他のインスタンスタイプの作成の詳細については、リードプール インスタンスを作成するとセカンダリ インスタンスを作成するをご覧ください。
プライマリ インスタンスを作成するには、gcloud alloydb instances create
コマンドを使用します。
gcloud alloydb instances create INSTANCE_ID \
--instance-type=PRIMARY \
--cpu-count=CPU_COUNT \
--availability-type=AVAILABILITY \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID \
--allowed-psc-projects=ALLOWED_PROJECT_LIST
次のように置き換えます。
INSTANCE_ID
: 作成するインスタンスの ID。先頭は英小文字にします。英小文字、数字、ハイフンを使用できます。CPU_COUNT
: インスタンスに必要な vCPU の数。有効な値は次のとおりです。2
: 2 個の vCPU、16 GB の RAM4
: 4 個の vCPU、32 GB の RAM8
: 8 個の vCPU、64 GB の RAM16
: 16 個の vCPU、128 GB の RAM32
: 32 個の vCPU、256 GB の RAM64
: 64 個の vCPU、512 GB の RAM96
: 96 個の vCPU、768 GB の RAM128
: 128 個の vCPU、864 GB の RAM
AVAILABILITY
: このインスタンスに高可用性(HA)を適用し、複数のゾーンにノードを配置するかどうかを示します。有効な値は次のとおりです。REGIONAL
: アクティブ ノードとスタンバイ ノードを別々に持つ HA インスタンスを作成し、それらの間の自動フェイルオーバーを構成します。これはデフォルト値で、本番環境に適しています。ZONAL
: 1 つのノードのみを含む基本インスタンスを作成し、自動フェイルオーバーは行いません。
REGION_ID
: インスタンスを配置するリージョン。CLUSTER_ID
: 前に作成したクラスタの ID。ALLOWED_PROJECT_LIST
: インスタンスへのアクセスを許可するプロジェクト ID またはプロジェクト番号のカンマ区切りリスト(例:my-project-1
、12345
、my-project-n
)。
サービス アタッチメントを取得する
Private Service Connect が有効になっている AlloyDB インスタンスを作成したら、サービス アタッチメント URL を取得し、取得した URL を使用して Private Service Connect エンドポイントを作成します。
gcloud alloydb instances describe
コマンドを使用して、インスタンスの詳細を表示します。
gcloud alloydb instances describe INSTANCE_ID \
--cluster=CLUSTER_ID --region=REGION_ID
次のように置き換えます。
INSTANCE_ID
: インスタンスの ID。CLUSTER_ID
: クラスタの ID。REGION_ID
: AlloyDB クラスタがデプロイされているリージョン。
このコマンドのレスポンスの例を次に示します。
"pscInstanceConfig": {
"serviceAttachmentLink:": "https://www.googleapis.com/compute/v1/projects/my-project/regions/my-region/serviceAttachments/my-service-attachment-id"
"allowedConsumerProjects": {
"45678",
"12345",
"67890",
},
"pscDnsName": "11111111-1111-1111-1111-111111111111.22222222-2222-2222-2222-222222222222.alloydb-psc.goog."
}
serviceAttachmentLink
パラメータには、サービス アタッチメント URL の値を保持します。
Private Service Connect エンドポイントを作成する
Private Service Connect エンドポイントを作成するには、一意のエンドポイント名とともにサービス アタッチメントの URL を渡します。Private Service Connect エンドポイントの作成の詳細については、エンドポイントを作成するをご覧ください。
gcloud compute addresses create
コマンドを使用して Private Service Connect エンドポイントの内部 IP アドレスを予約し、予約した IP アドレスを使用してエンドポイントを作成する方法もあります。
AlloyDB インスタンスに接続する
Private Service Connect が有効になっている AlloyDB インスタンスに接続するには、次のいずれかのオプションを使用します。
- 内部 IP アドレス
- DNS レコード
- AlloyDB Auth Proxy
- AlloyDB 言語コネクタ
DNS レコードを使用して接続するには、対応する VPC ネットワークの限定公開 DNS ゾーンに DNS レコードを作成する必要があります。DNS レコードを作成したら、このレコードを使用して、DNS レコード、AlloyDB Auth Proxy、または AlloyDB 言語コネクタを使用して、Private Service Connect が有効になっているインスタンスに直接接続できます。
DNS マネージド ゾーンと DNS レコードを構成する
ネットワークで DNS マネージド ゾーンと DNS レコードを構成する手順は次のとおりです。
AlloyDB インスタンスの概要情報(インスタンスの DNS 名など)を表示するには、
gcloud alloydb instances describe
コマンドを使用します。gcloud alloydb instances describe INSTANCE_ID \ --cluster=CLUSTER_ID --region=REGION_ID
次のように置き換えます。
INSTANCE_ID
: インスタンスの ID。CLUSTER_ID
: クラスタの ID。
レスポンスに DNS 名が表示されていることを確認します。DNS 名は
INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog.
パターンです。限定公開 DNS ゾーンを作成するには、
gcloud dns managed-zones create
コマンドを使用します。このゾーンは、Private Service Connect エンドポイントを介して AlloyDB インスタンスに接続するために使用される VPC ネットワークに関連付けられています。gcloud dns managed-zones create ZONE_NAME \ --project=PROJECT_ID \ --description=DESCRIPTION \ --dns-name=DNS_NAME \ --networks=NETWORK_NAME \ --visibility=private
次のように置き換えます。
ZONE_NAME
: DNS ゾーンの名前。PROJECT_ID
: ゾーンを含むプロジェクトの ID またはプロジェクト番号。 Google CloudDESCRIPTION
: ゾーンの説明(AlloyDB インスタンスの DNS ゾーンなど)。DNS_NAME
: ゾーンの DNS 名(例:INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog.
)。NETWORK_NAME
: VPC ネットワークの名前。
Private Service Connect エンドポイントを作成した後、ゾーンに DNS レコードを作成するには、gcloud dns record-sets create コマンドを使用します。
gcloud dns record-sets create DNS_NAME \ --project=PROJECT_ID \ --type=RRSET_TYPE \ --rrdatas=RR_DATA \ --zone=ZONE_NAME
次のように置き換えます。
DNS_NAME
: この手順で先ほど取得した DNS 名。RRSET_TYPE
: DNS レコードセットのリソース レコードタイプ(例: A)。RR_DATA
: Private Service Connect エンドポイントに割り振られた IP アドレス(例: 198.51.100.5)。rrdata1 rrdata2 rrdata3 など、複数の値を入力することもできます(例: 10.1.2.3 10.2.3.4 10.3.4.5)。
DNS レコードを使用して直接接続する
Private Service Connect エンドポイントを作成して DNS レコードを作成したら、DNS レコードを使用して直接接続できます。
Private Service Connect エンドポイントの DNS レコードを取得するには、
gcloud compute addresses describe
コマンドを使用します。gcloud compute addresses describe DNS_RECORD \ --project=PROJECT_ID \ --region=REGION_NAME
次のように置き換えます。
DNS_RECORD
: エンドポイントの DNS レコード。PROJECT_ID
: エンドポイントを含むプロジェクトの ID またはプロジェクト番号。 Google CloudREGION_NAME
: エンドポイントのリージョン名。
AlloyDB インスタンスに接続するには、DNS レコードを使用します。
psql -U USERNAME -h DNS_RECORD
次のように置き換えます。
USERNAME
: インスタンスに接続するユーザーの名前。DNS_RECORD
: エンドポイントの DNS レコード。
AlloyDB Auth Proxy を使用して接続する
AlloyDB Auth Proxy は、AlloyDB データベースへの承認済みの暗号化された接続を可能にするコネクタです。AlloyDB Auth Proxy は、ローカル環境でローカル クライアントを実行することによって機能します。アプリケーションは、データベースで使用される標準のデータベース プロトコルを使用して AlloyDB Auth Proxy と通信します。
Auth Proxy クライアントの起動時に --psc
フラグを設定すると、AlloyDB Auth Proxy は作成した DNS レコードを使用して、Private Service Connect が有効になっているインスタンスに接続します。
gcloud alloydb instances list
コマンドを使用して取得したインスタンス URI を渡し、--psc
フラグを設定して、Auth Proxy クライアントを起動します。
Auth Proxy を使用してインスタンスに接続する方法については、Auth Proxy を使用して接続するをご覧ください。
AlloyDB 言語コネクタを使用して接続する
AlloyDB 言語コネクタは、AlloyDB インスタンスへの接続時に TLS 1.3 と Identity and Access Management(IAM)認可による自動 mTLS を提供するライブラリです。
Language Connector は、インスタンスが Private Service Connect をサポートしていることを判断すると、作成した DNS レコードを使用してインスタンスに接続します。
Java
Private Service Connect を使用して AlloyDB インスタンスに接続する場合は、次を含めます。
config.addDataSourceProperty("alloydbIpType", "PSC");
Java Language Connectors で Private Service Connect エンドポイントを使用する方法については、GitHub リポジトリをご覧ください。
Python(pg8000)
Private Service Connect を使用して AlloyDB インスタンスに接続する場合は、次を含めます。
def getconn() -> pg8000.dbapi.Connection:
conn: pg8000.dbapi.Connection = connector.connect(
inst_uri,
"pg8000",
user=user,
password=password,
db=db,
# use ip_type to specify PSC
ip_type=IPTypes.PSC,
)
return conn
Python 言語コネクタで Private Service Connect エンドポイントを使用する方法については、GitHub リポジトリをご覧ください。
Python(asyncpg)
Private Service Connect を使用して AlloyDB インスタンスに接続する場合は、次を含めます。
async def getconn() -> asyncpg.Connection:
conn: asyncpg.Connection = await connector.connect(
inst_uri,
"asyncpg",
user=user,
password=password,
db=db,
# use ip_type to specify PSC
ip_type=IPTypes.PSC,
)
return conn
Python 言語コネクタで Private Service Connect エンドポイントを使用する方法については、GitHub リポジトリをご覧ください。
Go(pgx)
Private Service Connect を使用して AlloyDB インスタンスに接続する場合は、次を含めます。
d.Dial(ctx, instURI, alloydbconn.WithPSC())
Go 言語コネクタで Private Service Connect エンドポイントを使用する方法については、GitHub リポジトリをご覧ください。
Go(database/sql)
Private Service Connect を使用して AlloyDB インスタンスに接続する場合は、次を含めます。
cleanup, err := pgxv5.RegisterDriver(
"alloydb",
alloydbconn.WithDefaultDialOptions(alloydbconn.WithPSC())
)
Go 言語コネクタで Private Service Connect エンドポイントを使用する方法については、GitHub リポジトリをご覧ください。
内部 IP アドレスを介して直接接続する
Private Service Connect エンドポイントを作成したら、構成した IP アドレスを使用して AlloyDB インスタンスに直接接続できます。
Private Service Connect エンドポイントの IP アドレスを取得するには、
gcloud compute addresses describe
コマンドを使用します。gcloud compute addresses describe ADDRESS_NAME \ --project=PROJECT_ID \ --region=REGION_NAME
次のように置き換えます。
ADDRESS_NAME
: エンドポイントの IP アドレスの名前。PROJECT_ID
: エンドポイントを含むプロジェクトの ID またはプロジェクト番号。 Google CloudREGION_NAME
: エンドポイントのリージョン名。
AlloyDB インスタンスに接続するには、内部 IP アドレスを使用します。
psql -U USERNAME -h IP_ADDRESS"
次のように置き換えます。
USERNAME
: インスタンスに接続するユーザーの名前。IP_ADDRESS
: エンドポイントの IP アドレス。
制限事項
- Private Service Connect が有効になっている AlloyDB インスタンスのサービス アタッチメントに接続する Private Service Connect エンドポイントは、20 個まで設定できます。
- Private Service Connect が有効なクラスタを作成するときに
--network
フラグを使用できません。これは、限定公開サービス アクセスに関連付けられているためです。 - 既存のインスタンスで Private Service Connect を有効または無効にすることはできません。
- Private Service Connect が有効になっているインスタンスを、プライベート サービス アクセスを使用するように構成することはできません。
- アウトバウンド接続を必要とする
pglogical
、dblink
、postgres_fdw
の拡張機能はサポートされていません。