このページでは、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)のロールと権限は必要ありません。 |
Custom AlloyDB role (省略可) |
カスタムロールを使用している場合は、compute.networkAdmin ロールと dns.admin ロールに加えて、次の権限を付与します。
|
Private Service Connect を有効にする
インバウンド接続を有効にするには、Private Service Connect を有効にして AlloyDB クラスタを作成します。プライマリ インスタンスを作成するときに、接続が許可されるプロジェクトを指定します。アウトバウンド接続の場合は、ネットワーク アタッチメントの URI を指定します。
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
gcloud CLI を使用するには、Google Cloud CLI をインストールして初期化するか、Cloud Shell を使用します。
プライマリ インスタンスを作成するには、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
--psc-network-attachment-uri=NETWORK_ATTACHMENT_URI
次のように置き換えます。
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
)。NETWORK_ATTACHMENT_URI
: 作成するネットワーク アタッチメント URI の完全なリソース名(例:projects/PROJECT_ID/regions/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID
)。
Terraform
データベース クラスタ内にインスタンスを作成するには、Terraform リソースを使用します。
resource "google_alloydb_instance" "default" {
cluster = google_alloydb_cluster.default.name
instance_id = "alloydb-instance"
instance_type = "PRIMARY"
machine_config {
cpu_count = 2
}
psc_instance_config {
allowed_consumer_projects = ["123456789"]
psc_interface_configs {
network_attachment_resource = google_compute_network_attachment.default.id
}
}
}
resource "google_compute_network" "default" {
name = "alloydb-network"
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "default" {
name = "alloydb-subnetwork"
region = "us-central1"
network = google_compute_network.default.id
ip_cidr_range = "10.0.0.0/16"
}
resource "google_compute_network_attachment" "default" {
name = "alloydb-network-attachment"
region = "us-central1"
connection_preference = "ACCEPT_AUTOMATIC"
subnetworks = [
google_compute_subnetwork.default.self_link
]
}
data "google_project" "project" {}
Cloud Shell を準備する
Google Cloud プロジェクトで Terraform 構成を適用するには、次のように Cloud Shell を準備します。
- Cloud Shell を起動します。
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュール)が必要です。
- Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイル名の拡張子は TF にする必要があります(例:
main.tf
)。このドキュメントでは、ファイル名をmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
- 新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。git clone https://github.com/terraform-google-modules/terraform-docs-samples
terraform-docs-samples
ディレクトリで、alloydb
ディレクトリに移動します。cd terraform-docs-samples/alloydb
- 新しく作成した
main.tf
にサンプルコードをコピーします。cp SAMPLE_FILE
<var>SAMPLE_FILE</var>
は、コピーするサンプル ファイルの名前に置き換えます(例:main.tf
)。 - 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
- Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
省略可: 最新バージョンの Google プロバイダを使用する場合は、terraform init
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
- 構成を確認して、Terraform の更新が想定どおりであることを確認します。
必要に応じて構成を修正します。terraform plan
- 次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。 Terraform に「terraform apply
Apply complete!
」というメッセージが表示されるまで待ちます。
Google Cloud プロジェクトを開いて結果を確認します。Google Cloud コンソールの UI でリソースに移動して、リソースが Terraform によって作成または更新されたことを確認します。
インバウンド接続を構成する
AlloyDB インスタンスで PSC を有効にしたら、サービス アタッチメント URL を取得し、AlloyDB インスタンスに安全に接続するようにコンシューマ VPC のエンドポイントを構成できます。
サービス アタッチメントを取得する
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 インスタンスを作成または更新するときにネットワーク アタッチメント URI を設定します。この URI を使用すると、移行などのアウトバウンド オペレーション中に、プロジェクトと AlloyDB インスタンス間の安全な接続が可能になります。
ネットワーク アタッチメントを作成する
作成するネットワーク アタッチメントは、ACCEPT_AUTOMATIC
(接続を自動的に受け入れる)または ACCEPT_MANUAL
(接続を手動で受け入れる)に設定できます。ネットワーク アタッチメントの作成の詳細については、ネットワーク アタッチメントの作成と管理をご覧ください。
接続を自動的に受け入れるネットワーク アタッチメントを作成する場合は、承認されるプロジェクトのリストを明示的に設定する必要はありません。接続を手動で承認するには、AlloyDB インスタンスが配置されているプロジェクトのサービス所有のプロジェクト番号を、承認済みプロジェクトのリストに追加する必要があります。
サービス所有のプロジェクト番号を確認するには、次のコマンドを実行します。
gcloud alpha alloydb clusters describe CLUSTER_ID --region=REGION_ID
レスポンスの例を次に示します。
pscConfig:
pscEnabled: true
serviceOwnedProjectNumber: 123456789012
サービス所有のプロジェクト番号を特定したら、そのプロジェクトを承認済みプロジェクトのリストに追加し、ネットワーク アタッチメントを作成します。
ネットワーク アタッチメントのリージョンが AlloyDB インスタンスのリージョンと同じであることを確認します。また、ネットワーク アタッチメントの作成に使用するサブネットは、RFC 1918 IP 範囲(10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
)に属している必要があります。
アウトバウンド接続用にインスタンスを更新する
Private Service Connect が有効になっている既存の AlloyDB インスタンスのアウトバウンド接続を有効にするには、--psc-network-attachment-uri
パラメータを gcloud alloydb instances update
コマンドに渡します。
2025 年 3 月 1 日より前に作成された AlloyDB インスタンスは、アウトバウンド接続を有効にするように更新できません。別の方法として、次のいずれかのオプションを使用することをおすすめします。
- アウトバウンド接続を有効にして、プライマリ インスタンスのリージョンのクロスリージョン レプリカ(CRR)レプリカを作成します。次に、切り替えを実行して、レプリカ インスタンスを新しいプライマリ インスタンスとして指定します。
- 既存の AlloyDB クラスタとプライマリ インスタンスのバックアップを実行します。次に、アウトバウンド接続を有効にして、新しい AlloyDB クラスタとプライマリ インスタンスを作成します。最後に、以前に作成したバックアップを新しいクラスタに復元します。
アウトバウンド接続を無効にする
既存の AlloyDB インスタンスのアウトバウンド接続を無効にするには、--clear-psc-network-attachment-uri
パラメータを gcloud alloydb instances update
コマンドに渡します。
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
: ゾーンが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号。DESCRIPTION
: ゾーンの説明(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
: エンドポイントが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号。REGION_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 を渡して Auth Proxy クライアントを起動し、--psc
フラグを設定します。
Auth Proxy を使用してインスタンスに接続する方法については、Auth Proxy を使用して接続するをご覧ください。
AlloyDB 言語コネクタを使用して接続する
AlloyDB 言語コネクタは、AlloyDB インスタンスへの接続時に TLS 1.3 と Identity and Access Management(IAM)認可による自動 mTLS を提供するライブラリです。
言語コネクタは、インスタンスが Private Service Connect をサポートしていることを判断すると、作成した DNS レコードを使用してインスタンスに接続します。
Java
Private Service Connect を使用して AlloyDB インスタンスに接続する場合は、次を含めます。
config.addDataSourceProperty("alloydbIpType", "PSC");
Java 言語コネクタで 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(データベース / 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
: エンドポイントが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号。REGION_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 が有効になっているインスタンスを、プライベート サービス アクセスを使用するように構成することはできません。