GCP PSC は Scale および Enterprise プランで利用できます。アップグレードするには、Cloud Console のプランページをご覧ください。
Private Service Connect (PSC) は Google Cloud のネットワーク機能で、コンシューマーが自身の仮想プライベートクラウド (VPC) ネットワーク内からマネージドサービスにプライベートにアクセスできるようにします。同様に、マネージドサービスのプロデューサーは、これらのサービスをそれぞれ分離された独自の VPC ネットワークでホストし、コンシューマーにプライベート接続を提供できます。
サービスプロデューサーは、Private Service Connect サービスを作成して、自社のアプリケーションをコンシューマーに公開します。サービスコンシューマーは、これらの Private Service Connect タイプのいずれかを通じて、それらの Private Service Connect サービスに直接アクセスします。

Private Service Connect Global Access を使用する際の重要な注意事項:
- Global Access を利用する Region は、同じ VPC に属している必要があります。
- Global Access は PSC レベルで明示的に有効にする必要があります (以下のスクリーンショットを参照してください) 。
- ファイアウォール設定で、他の Region からの PSC へのアクセスがブロックされていないことを確認してください。
- GCP のリージョン間データ転送料金が発生する場合があることに注意してください。
クロスリージョン接続はサポートされていません。プロデューサーとコンシューマーの Region は同一である必要があります。ただし、Private Service Connect (PSC) レベルで Global Access を有効にすると、VPC 内の他の Region から接続できます。
GCP PSC を有効にするには、次の手順を実行してください:
- Private Service Connect 用の GCP サービス アタッチメント を取得します。
- サービス エンドポイントを作成します。
- 「Endpoint ID」を ClickHouse Cloud サービスに追加します。
- 「Endpoint ID」を ClickHouse serviceの許可リストに追加します。
注意
ClickHouse は、GCP リージョン内で同じ公開済みの PSC エンドポイント を再利用できるよう、サービスをグループ化しようとします。ただし、このグループ化が保証されるわけではありません。特に、サービスを複数の ClickHouse organization にまたがって配置している場合はその傾向があります。 ClickHouse organization 内の他のサービスですでに PSC を設定している場合は、このグループ化により大半の手順を省略できることが多く、最後の手順である 「Endpoint ID」を ClickHouse service の許可リストに追加する に直接進めます。
Terraform の例は こちら を参照してください。
始める前に
ClickHouse Cloud サービスに関する情報を取得する必要があります。これは、ClickHouse Cloud コンソールまたは ClickHouse API のいずれかを使用して取得できます。ClickHouse API を使用する場合は、先に進む前に次の環境変数を設定してください。
REGION=<GCP形式のリージョンコード(例:us-central1)>
PROVIDER=gcp
KEY_ID=<ClickHouseのキーID>
KEY_SECRET=<ClickHouseのキーシークレット>
ORG_ID=<ClickHouseの組織ID>
SERVICE_NAME=<ClickHouseのサービス名>新しい ClickHouse Cloud API キー を作成するか、既存のものを使用できます。
リージョン、プロバイダー、サービス名で絞り込み、ClickHouse の INSTANCE_ID を取得します。
INSTANCE_ID=$(curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services" | \
jq ".result[] | select (.region==\"${REGION:?}\" and .provider==\"${PROVIDER:?}\" and .name==\"${SERVICE_NAME:?}\") | .id " -r)Private Service Connect 用の GCP サービス アタッチメントと DNS 名を取得する
オプション 1: ClickHouse Cloud コンソール
ClickHouse Cloud コンソールで、Private Service Connect 経由で接続するサービスを開き、Settings メニューを開きます。Set up private endpoint ボタンをクリックします。Service name (endpointServiceId) と DNS name (privateDnsHostname) を控えておいてください。これらは次の手順で使用します。

オプション 2: API
Private Service Connect の GCP サービス アタッチメントと DNS 名を取得します。
curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq .result
{
"endpointServiceId": "projects/.../regions/us-central1/serviceAttachments/production-us-central1-clickhouse-cloud",
"privateDnsHostname": "xxxxxxxxxx.us-central1.p.gcp.clickhouse.cloud"
}endpointServiceId と privateDnsHostname を控えておいてください。これらは後続の手順で使用します。
サービスエンドポイントを作成する
このセクションでは、サービスエンドポイントを作成します。
プライベートサービス接続の追加
まず、プライベートサービス接続を作成します。
オプション 1: Google Cloud console を使用する
Google Cloud console で、Network services -> Private Service Connect に移動します。

Connect Endpoint ボタンをクリックして、Private Service Connect の作成ダイアログを開きます。
- Target: Published service を使用します
- Target service: Private Service Connect 用の GCP サービスアタッチメントを取得する 手順で取得した
endpointServiceIdAPI またはService nameconsole を使用します。 - Endpoint name: PSC の Endpoint name に名前を設定します。
- Network/Subnetwork/IP address: 接続に使用するネットワークを選択します。Private Service Connect endpoint 用に IP アドレスを新規作成するか、既存のものを使用する必要があります。この例では、your-ip-address という名前のアドレスを事前に作成し、IP アドレス
10.128.0.2を割り当てています。 - endpoint をどの Region からでも利用できるようにするには、Enable global access チェックボックスを有効にします。

PSC Endpoint を作成するには、ADD ENDPOINT ボタンを使用します。
接続が承認されると、Status カラムは Pending から Accepted に変わります。

PSC Connection ID をコピーします。これは次の手順で Endpoint ID として使用します。
オプション 2: Terraform を使用する
provider "google" {
project = "my-gcp-project"
region = "us-central1"
}
variable "region" {
type = string
default = "us-central1"
}
variable "subnetwork" {
type = string
default = "https://www.googleapis.com/compute/v1/projects/my-gcp-project/regions/us-central1/subnetworks/default"
}
variable "network" {
type = string
default = "https://www.googleapis.com/compute/v1/projects/my-gcp-project/global/networks/default"
}
resource "google_compute_address" "psc_endpoint_ip" {
address = "10.128.0.2"
address_type = "INTERNAL"
name = "your-ip-address"
purpose = "GCE_ENDPOINT"
region = var.region
subnetwork = var.subnetwork
}
resource "google_compute_forwarding_rule" "clickhouse_cloud_psc" {
ip_address = google_compute_address.psc_endpoint_ip.self_link
name = "ch-cloud-${var.region}"
network = var.network
region = var.region
load_balancing_scheme = ""
# サービスアタッチメント
target = "https://www.googleapis.com/compute/v1/$TARGET" # 以下の注記を参照
}
output "psc_connection_id" {
value = google_compute_forwarding_rule.clickhouse_cloud_psc.psc_connection_id
description = "Add GCP PSC Connection ID to allow list on instance level."
}エンドポイントのプライベート DNS 名を設定する
Private Service Connect 用の GCP サービスアタッチメント と DNS 名を取得する 手順で取得した「DNS 名」が、GCP Private Service Connect エンドポイントの IP アドレスを指すように設定する必要があります。これにより、VPC/ネットワーク内のサービスやコンポーネントがその名前を正しく解決できるようになります。
ClickHouse Cloud 組織に Endpoint ID を追加
オプション 1: ClickHouse Cloud コンソール
組織にエンドポイントを追加するには、「Endpoint ID」を ClickHouse service の許可リストに追加する 手順に進んでください。ClickHouse Cloud コンソールを使用して PSC Connection ID を service の許可リストに追加すると、自動的に組織にも追加されます。
エンドポイントを削除するには、Organization details -> Private Endpoints を開き、削除ボタンをクリックしてエンドポイントを削除します。

オプション 2: API
コマンドを実行する前に、以下の環境変数を設定します。
以下の ENDPOINT_ID は、プライベートサービス接続の追加 の手順にある Endpoint ID の値に置き換えてください。
エンドポイントを追加するには、次を実行します。
cat <<EOF | tee pl_config_org.json
{
"privateEndpoints": {
"add": [
{
"cloudProvider": "gcp",
"id": "${ENDPOINT_ID:?}",
"description": "A GCP private endpoint",
"region": "${REGION:?}"
}
]
}
}
EOFエンドポイントを削除するには、次を実行します:
cat <<EOF | tee pl_config_org.json
{
"privateEndpoints": {
"remove": [
{
"cloudProvider": "gcp",
"id": "${ENDPOINT_ID:?}",
"region": "${REGION:?}"
}
]
}
}
EOF組織のプライベート エンドポイントを追加または削除する:
curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X PATCH -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}" -d @pl_config_org.jsonClickHouse service の許可リストに "Endpoint ID" を追加する
Private Service Connect 経由で利用可能にする各インスタンスについて、許可リストに Endpoint ID を追加する必要があります。
オプション 1: ClickHouse Cloud コンソール
ClickHouse Cloud コンソール で、Private Service Connect 経由で接続するサービスを開き、Settings に移動します。プライベートサービス接続の追加 の手順で取得した Endpoint ID を入力し、Create endpoint をクリックします。

オプション 2: API
コマンドを実行する前に、以下の環境変数を設定します。
以下の ENDPOINT_ID は、プライベートサービス接続の追加 の手順で取得した Endpoint ID の値に置き換えてください。
Private Service Connect 経由で利用可能にする各サービスに対して、これを実行します。
追加するには:
cat <<EOF | tee pl_config.json
{
"privateEndpointIds": {
"add": [
"${ENDPOINT_ID}"
]
}
}
EOF削除するには:
cat <<EOF | tee pl_config.json
{
"privateEndpointIds": {
"remove": [
"${ENDPOINT_ID}"
]
}
}
EOFcurl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X PATCH -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" -d @pl_config.json | jqPrivate Service Connect を使用したインスタンスへのアクセス
Private Service Connect が有効な各サービスには、パブリック エンドポイントとプライベート エンドポイントがあります。Private Service Connect を使用して接続するには、Private Service Connect の GCP サービスアタッチメント を取得する 手順で取得した privateDnsHostname であるプライベート エンドポイントを使用する必要があります。
プライベートDNSホスト名の取得
オプション 1: ClickHouse Cloud コンソール
ClickHouse Cloud コンソール で Settings に移動します。Set up private endpoint ボタンをクリックします。開いたフライアウトで、DNS Name をコピーします。

オプション 2: API
curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq .result{
...
"privateDnsHostname": "xxxxxxx.<region code>.p.gcp.clickhouse.cloud"
}この例では、xxxxxxx.yy-xxxxN.p.gcp.clickhouse.cloud ホスト名への接続は Private Service Connect 経由になります。一方、xxxxxxx.yy-xxxxN.gcp.clickhouse.cloud への接続はインターネット経由になります。
トラブルシューティング
DNS 設定をテストする
DNS_NAME - Private Service Connect 用の GCP サービスアタッチメント と DNS 名を取得する の手順で取得した privateDnsHostname を使用します
nslookup $DNS_NAMENon-authoritative answer:
...
Address: 10.128.0.2相手側によって接続がリセットされる
- 最も可能性が高いのは、Endpoint ID がサービスの許可リストに追加されていないことです。サービスの許可リストに Endpoint ID を追加する 手順を再度確認してください。
接続を確認する
PSC リンクを使用した接続に問題がある場合は、openssl を使って接続性を確認してください。Private Service Connect エンドポイントの status が Accepted になっていることを確認してください。
OpenSSL で接続できるはずです (出力に CONNECTED と表示されます) 。errno=104 は想定内です。
DNS_NAME - Private Service Connect 用の GCP サービスアタッチメント と DNS 名を取得する 手順の privateDnsHostname を使用します
openssl s_client -connect ${DNS_NAME}:9440CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 335 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)エンドポイントフィルタを確認する
REST API
curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X GET -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" | jq .result.privateEndpointIds
[
"102600141743718403"
]リモートデータベースへの接続
GCP Private Service Connect documentation には、次のように記載されています。
サービス指向の設計: プロデューサー サービスは、コンシューマー VPC ネットワークに単一の IP アドレスを公開するロードバランサーを介して公開されます。プロデューサー サービスにアクセスするコンシューマー トラフィックは単方向であり、ピア接続された VPC ネットワーク全体ではなく、サービスの IP アドレスにのみアクセスできます。
ClickHouse Cloud で MySQL または PostgreSQL のテーブル関数を GCP VPC 内でホストされているデータベースに接続するには、ClickHouse Cloud からの接続を許可するように GCP VPC のファイアウォール ルールを設定します。ClickHouse Cloud リージョンのデフォルトの egress IP アドレス と、利用可能な静的 IP アドレス を確認してください。
詳細情報
より詳しい情報については、cloud.google.com/vpc/docs/configure-private-service-connect-services をご覧ください。