概要
このガイドでは、AWS PrivateLink VPC endpoint services を使って、Amazon MSK クラスターを ClickPipes から利用できるように公開する方法を説明します。
この方法は、MSK multi-VPC connectivity が利用できない場合や、それだけでは不十分な場合に使用します。たとえば、次のようなケースです。
- ClickPipes から MSK へのクロスリージョン接続。
- MSK Express クラスター。
- プライベート接続でもブローカーのホスト名を維持する必要がある Kafka 構成。
同一リージョンの標準的な MSK クラスターでは、通常は MSK multi-VPC connectivity のほうがシンプルで、推奨される選択肢です。
同じ PrivateLink パターンは、AWS を介して公開されるセルフマネージドまたはオンプレミスの Kafka クラスターにも使用できますが、この記事の例では MSK を使用します。
セットアップの仕組み
Kafkaクライアントはまずブートストラップブローカーに接続してクラスターのメタデータを取得し、その後、そのメタデータで通知されたブローカーのホスト名に直接接続します。
そのため、すべてのブローカーの前段に単一のロードバランサーを配置するだけでは、信頼性の高い MSK PrivateLink のセットアップとしては不十分です。代わりに、ブローカーごとに 1 つの PrivateLink パスを作成してください:
MSK broker hostname
-> ClickPipes reverse private endpoint with custom private DNS
-> VPC endpoint service
-> Network Load Balancer
-> MSK broker private IP各ブローカーには、それぞれ次のものが必要です:
- 内部向け Network Load Balancer (NLB) 。
- ブローカーのプライベート IP を対象とする IP ターゲットグループ。
- その NLB をバックエンドとする VPC エンドポイントサービス。
- ClickPipes のリバースプライベートエンドポイント (RPE) 。
- そのブローカーのホスト名に一致するカスタム private DNS 名。
NLB では TCP パススルーを使用する必要があります。これにより、Kafka クライアントは TLS の SNI と証明書の検証で、元の MSK ブローカーのホスト名を引き続き使用できます。
要件
- プライベートサブネット内の MSK クラスター。
- MSK クラスターの broker のホスト名とプライベート IP アドレス。
- MSK VPC で NLB、ターゲットグループ、listener、VPC エンドポイントサービスを作成するための権限。
- 各 VPC エンドポイントサービスで許可される ClickPipes の AWS account principal:
arn:aws:iam::072088201116:root。 - ClickHouse Cloud service で custom private DNS 機能が有効になっていること。リバースプライベートエンドポイントの作成時に
Custom private DNS nameフィールドが表示されない場合は、ClickHouse Support に連絡してください。
ブローカーのホスト名とプライベート IP を取得する
AWS CLI を使用して、MSK ブローカーノードを一覧表示します:
aws kafka list-nodes \
--cluster-arn <MSK_CLUSTER_ARN> \
--query 'NodeInfoList[].BrokerNodeInfo.{BrokerId:BrokerId,Host:Endpoints[0],PrivateIp:ClientVpcIpAddress}' \
--output table各 broker の hostname、プライベート IP アドレス、Kafka ポートをそれぞれ記録します。MSK IAM 認証の場合、ポートは通常 9098 です。
ClickPipe は、これらの broker hostname を Kafka broker として使用します。この UI ベースのセットアップでは、MSK の bootstrap broker string は使用しないでください。
broker ごとに endpoint service を 1 つずつ作成する
MSK の各 broker に対して、以下の手順を繰り返します。
内部 NLB を作成する
MSK VPC 内に内部向けの Network Load Balancer を作成します。NLB はプライベートサブネットを使用し、インターネット向けにしてはいけません。
NLB にセキュリティグループがアタッチされている場合は、Enforce Security Group Inbound Rules on Private Link Traffic を無効にします。これは、ClickPipes の VPC エンドポイントからのトラフィックが NLB に到達できるようにするために必要です。
IPターゲットグループを作成する
次の設定でターゲットグループを作成します。
- ターゲットタイプ:
IP。 - プロトコル:
TCP。 - ポート: broker の Kafka ポート。たとえば、MSK IAM の場合は
9098。 - ターゲット: 1 つの broker のプライベート IP アドレスを指定します。
トラフィックポートに対して TCP ヘルスチェックを使用します。
TCP リスナーを作成する
ブローカーの Kafka ポートに NLB リスナーを作成し、トラフィックをブローカー固有のターゲットグループに転送します。
VPC エンドポイントサービスを作成する
ブローカー固有の NLB をバックエンドとする VPC エンドポイントサービスを作成します。
許可対象の principal に ClickPipes の AWS principal を追加します:
arn:aws:iam::072088201116:rootMSK クラスターと ClickPipes が異なる AWS リージョンにある場合は、エンドポイントサービスのサポート対象リージョンに ClickPipes のリージョンを追加して、クロスリージョンアクセスを有効にします。
エンドポイントサービス名を控えておきます。以下のような形式です。
com.amazonaws.vpce.<region>.vpce-svc-0123456789abcdef0ClickPipes のリバースプライベートエンドポイントを作成する
ClickHouse Cloud console で、各ブローカーの VPC エンドポイントサービスごとに 1 つのリバースプライベートエンドポイントを作成します。
- 対象の ClickHouse Cloud サービスに移動します。
- ClickPipe の作成を開始します。
Reverse private endpointを選択します。- VPC エンドポイントのタイプとして
VPC endpoint serviceを選択します。 - ブローカー固有の VPC エンドポイントサービス名を入力します。
Custom private DNS nameに、そのブローカーの元の MSK ブローカー ホスト名 を入力します。- エンドポイントを作成します。
- エンドポイントが承認待ちの場合は、AWS の VPC エンドポイントサービス console でエンドポイントの接続リクエストを承認します。
すべてのブローカー ホスト名 に対応する RPE が作成されるまで、この手順を繰り返します。
カスタム private DNS の動作、命名規則、API/Terraform のオプションについては、以下を参照してください。 Custom private DNS。
リバースプライベートエンドポイントは、OpenAPI または Terraform を使って作成することもできます。
OpenAPI では、各ブローカーに対して 1 つのリバースプライベートエンドポイントを作成し、type を VPC_ENDPOINT_SERVICE に設定したうえで、ブローカー固有の VPC エンドポイントサービス名と、そのブローカー ホスト名 用のカスタム private DNS マッピングを 1 つ指定します。
{
"description": "MSK broker 1",
"type": "VPC_ENDPOINT_SERVICE",
"vpcEndpointServiceName": "com.amazonaws.vpce.eu-central-1.vpce-svc-0123456789abcdef0",
"customPrivateDnsMappings": [
{
"privateDnsName": "b-1.example-cluster.abcde.c2.kafka.eu-central-1.amazonaws.com"
}
]
}Terraform を使用する場合は、エンドポイントの作成に clickhouse_clickpipes_reverse_private_endpoint を使用し、ブローカーのホスト名マッピングの構成に clickhouse_clickpipes_reverse_private_endpoint_custom_private_dns を使用します。
Kafka ClickPipe を作成する
リバース プライベート エンドポイントを使用して ClickPipe を作成するには、ClickPipes AWS PrivateLink ガイド に従ってください。
Kafka ClickPipe を作成する際は、次の点に注意してください。
- ブローカー一覧には、元の MSK ブローカーのホスト名を使用し、MSK リスナーと認証方式に対応するポートも含めてください。
- MSK の bootstrap broker string は使用しないでください。
- ブローカーごとのリバース プライベート エンドポイントをすべて選択またはアタッチしてください。
- IAM ロール認証など、MSK クラスターで必要な認証方式を設定してください。
ポートは MSK リスナーによって異なります。たとえば、IAM 認証では一般に 9098、SASL/SCRAM では一般に 9096、TLS では一般に 9094 を使用します。正しいポートは、MSK クラスターの設定または bootstrap broker output で確認してください。
ブローカー一覧の例:
b-1.example-cluster.abcde.c2.kafka.eu-central-1.amazonaws.com:9098,b-2.example-cluster.abcde.c2.kafka.eu-central-1.amazonaws.com:9098,b-3.example-cluster.abcde.c2.kafka.eu-central-1.amazonaws.com:9098ブローカー一覧内の各ホスト名は、いずれかのRPEに設定されたCustom private DNS nameと一致している必要があります。
Terraform の自動化
aws-msk-vpc-endpoint-service Terraform module では、このセットアップを自動化する方法を紹介しています。このモジュールは、broker ごとの NLB、ターゲットグループ、VPC エンドポイントサービス、ClickPipes RPE、カスタム private DNS マッピングを作成します。
この Terraform module では、bootstrap と broker の hostname の両方を含め、RPE ごとに複数のカスタム private DNS マッピングを管理できます。この記事では、手動で ClickPipes UI を使うワークフローに焦点を当てており、各 RPE はカスタム private DNS 名として 1 つの broker hostname を使用します。