TL;DR
Terraform と OpenAPI を使用して、ClickPipes リソースを「コードとして」プロビジョニングおよび管理できるようになりました。すべてのコネクタに対応し、使いやすさも向上しています。
ClickOps(ユーザーインターフェース上のボタンをクリックする操作)は、新しい製品を使い始める際には便利ですが、本番環境への移行が進むにつれて、より自動化されバージョン管理された方法でリソースを管理するアプローチ、すなわち「Infrastructure as Code」に移行するのが一般的です。
ClickHouse Cloud を開発するにあたり、私たちの目標の 1 つは API ファーストにすることです。ユーザーインターフェースから実行できるあらゆる操作は、既存のデプロイワークフローに組み込める(そしてエージェントからも活用できる 🤖)プログラムインターフェース経由でも利用できるようにすべきだと考えています。ClickHouse Cloud のフルマネージドデータ取り込みプラットフォームである ClickPipes も例外ではありません。
本記事の公開に合わせて、Terraform における ClickPipes リソースおよび OpenAPI におけるエンドポイントの一般提供 (GA) を発表します!2025年にこれらのインターフェースのベータサポートを発表しましたが、一部の機能や使い勝手の面で不足があり、すべての ユーザーが ClickPipes をコードとして管理できる状態ではありませんでした。特にコネクターの対応範囲が完全ではありませんでしたが、今回のアップデートにより、CDC ClickPipes (Postgres、MySQL、MongoDB) もコードとして作成できるようになりました!
サポートされる内容
CDC ClickPipes のサポートに加えて、提供開始に合わせて両方のインターフェースに新しい ClickPipes コネクターと機能 (例: BigQuery および Azure Blob Storage コネクター、S3 および GCS の unordered モード) を追加しました。さらに、リバースプライベートエンドポイントの作成と管理のサポートなど、重要な機能の不足も解消しています。これにより、ClickPipes UI にあって OpenAPI や Terraform 経由で公開されていない機能はほとんどなくなりました。SSH トンネリングは例外ですが、現在対応を進めています!
現在、すべての操作が ClickHouse Terraform provider のリソースまたは OpenAPI エンドポイント に明確に対応しています:
| アクション | Terraform | OpenAPI |
|---|---|---|
| 一覧取得 | terraform state list | GET /clickpipes |
| 作成 | リソース追加 + terraform apply | POST /clickpipes |
| 取得 | terraform show / refresh | GET /clickpipes/{id} |
| 更新 | 設定変更 + terraform apply | PATCH /clickpipes/{id} |
| 停止 | stopped = true + terraform apply | PATCH /clickpipes/{id}/state {"action": "stop"} |
| 再開 | stopped = false + terraform apply | PATCH /clickpipes/{id}/state {"action": "start"} |
| 設定の更新 | settings ブロック更新 + terraform apply | PUT /clickpipes/{id}/settings |
| スケール | scaling ブロック更新 + terraform apply | PATCH /clickpipes/{id}/scaling |
| 再同期のトリガー | trigger_resync = true + terraform apply | PATCH /clickpipes/{id} |
| 削除 | terraform destroy | DELETE /clickpipes/{id} |
ClickPipe をゼロからプロビジョニングする場合は、手順: 新しい ClickPipe の設定 から始めてください。すでに稼働中のパイプラインがあり、それらをバージョン管理下に置きたい場合は、手順: 既存の ClickPipes のインポート を確認してください。
手順: 新しい ClickPipe の設定
Cloud API キーの作成
1. ClickHouse Terraform provider は ClickHouse Cloud サービスとの連携に Cloud API を使用するため、認証用に有効な API キーが必要です。このプロバイダーを初めて利用する場合は、まず新しい API キーを作成します。Organization > API keys > New API key に移動し、表示される Key ID と Key Secret のペアを控えておくか、ダウンロードします。

2. 次に、プロバイダーを設定します。認証情報をソース管理から除外するため、Terraform 変数 と、.gitignore に追加できる terraform.tfvars ファイルの使用を推奨します:
variables.tf
variable "organization_id" {
description = "ClickHouse Cloud organization ID"
type = string
}
variable "service_id" {
description = "ClickHouse Cloud service ID"
type = string
}
variable "token_key" {
description = "ClickHouse Cloud API key ID"
type = string
sensitive = true
}
variable "token_secret" {
description = "ClickHouse Cloud API key secret"
type = string
sensitive = true
}
...terraform.tfvars
organization_id = "" # your org ID from cloud.clickhouse.com
service_id = "" # target ClickHouse service ID
token_key = "" # API key ID
token_secret = "" # API key secret
...ClickPipes リソースの設定
この例では、Postgres データベースから ClickHouse へニアリアルタイムで継続的に変更を取り込むための Postgres CDC ClickPipe リソースを設定します。注意点として、CDC ClickPipe を作成する前に、データソースの設定ガイドに従って、アップストリームでのレプリケーションを有効にしておいてください。
1. ClickPipe を作成する準備ができたら、ソース属性に postgres を指定した新しい clickhouse_clickpipe リソース を Terraform 設定に追加します。以下は、単一の Postgres テーブル (public.firenibble) を同期し、source_table の新しい変更 (つまり 挿入、更新、削除) を cdc を使用して ClickHouse Cloud の target_table に反映する単一の ClickPipe を作成する基本的な設定例です。
main.tf
terraform {
required_providers {
clickhouse = {
source = "ClickHouse/clickhouse"
version = ">= 3.14.0"
}
}
}
provider "clickhouse" {
organization_id = var.organization_id
token_key = var.token_key
token_secret = var.token_secret
}
resource "clickhouse_clickpipe" "pg_pipe" {
name = "tf-postgres-clickpipe"
service_id = var.service_id
source = {
postgres = {
host = var.postgres_host
port = 5432
database = var.postgres_database
credentials = {
username = var.postgres_user
password = var.postgres_password
}
settings = {
replication_mode = "cdc"
}
table_mappings = [
{
source_schema_name = "public"
source_table = "firenibble"
target_table = "public_firenibble"
}
]
}
}
destination = {
database = "default"
}
}2. Cloud API の認証情報とリソース設定を Terraform に渡したので、デプロイの準備が整いました。terraform init を実行して ClickHouse プロバイダーをインストールし、次に terraform apply を実行してパイプラインをプロビジョニングします。Terraform は実行計画を出力し、デプロイ前に計画された変更の確認を求めます:
terraform apply
...
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
clickhouse_clickpipe.pg_pipe: Creating...
clickhouse_clickpipe.pg_pipe: Still creating... [00m10s elapsed]
clickhouse_clickpipe.pg_pipe: Creation complete after 11s [id=10128f88-100c-4830-b480-e242fa89570f]以上で完了です!プログラムによって作成された最初の CDC ClickPipe が稼働しました。ClickHouse Cloud コンソールに移動し、(Data sources > ClickPipes の配下に) パイプラインが存在し、データ取り込みを順調に処理していることを確認してください。

さまざまなパイプタイプ、取り込みモード、ネットワーク構成に応じた Terraform での ClickPipes 設定例は、プロバイダーのリポジトリ で確認できます。
手順: 既存の ClickPipes のインポート
以下の手順は HashiCorp Terraform v1.5+ でテストされています。インポートのワークフローは代替実装 (OpenTofu など) とも広く互換性があるはずですが、最小バージョンや基本的な手法が異なる場合があります。
すでに ClickHouse Terraform provider を使用しているプロジェクトがある場合は、手動で設定する代わりに、既存の ClickPipes を Terraform state にインポートしてコードとして管理できます。
1. Cloud API を使用して、対象の組織およびサービスに存在する ClickPipes を取得します:
curl -s \
"https://api.clickhouse.cloud/v1/organizations/$ORG_ID/services/$SERVICE_ID/clickpipes" \
-u "$KEY_ID:$KEY_SECRET" | jq -r '.result[] | "\(.id)\t\(.name)"'
1667855d-1646-4693-8cac-60e1c386ccb1 existing_pg_pipe
2e4c3974-025e-47a0-861b-4c200b6c0249 existing_mysql_pipe
76a42195-ef25-40fc-ae3d-31733d377f77 existing_mongo_pipe2. 設定ファイルを編集し、Terraform にインポートしたい ClickPipes の import ブロックを追加します:
...
import {
to = clickhouse_clickpipe.existing_pg_pipe
id = "<service_id>:1667855d-1646-4693-8cac-60e1c386ccb1"
}
...3. 既存のリソースから Terraform のリソース設定を生成します:
terraform plan -generate-config-out=generated.tfgenerated.tf を確認し、Terraform が state から取得できない機密フィールド (認証情報など) を入力します。
# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.
# __generated__ by Terraform
resource "clickhouse_clickpipe" "pg_pipe" {
…
credentials = {
username = var.postgres_user
password = var.postgres_password
}
…}4. terraform plan を実行して予期しない差分がないことを確認し、terraform apply を実行して完了します。
注: Postgres CDC ClickPipes の場合、terraform apply を実行する前にリソース設定で stopped = true を設定する必要があります。Terraform はパイプを一時停止し、1 回のパスで認証情報を state に書き込みます。完了したら、stopped = false に設定して再度 apply を実行し、再開します。これは 既知の制限事項 です。
今後の展開
ClickPipes リソースは v3.14.0 以降の ClickHouse Terraform provider の安定版リリースで利用可能であり、OpenAPI エンドポイントもベータを終了しました (仕様書)。ClickPipes の進化に伴い、私たちは Terraform と OpenAPI を「完了の定義」の一部を成すファーストクラスのインターフェースとして扱い続けます。上記のような複雑な使い勝手に関する制限事項の解消に積極的に取り組んでいるほか、要望の多い SSH トンネリング 設定のサポートにも取り組んでいます!
Terraform や OpenAPI を使用した ClickPipes の設定および管理についてフィードバックがある場合や問題が発生した場合は、私たちのチームまでご連絡ください。間もなく、最近リリースされた ClickHouse CLI でも ClickPipes が利用できるようになります。数週間以内に詳細をお知らせします!
ClickPipes を今すぐ試す
ETL の複雑さを解消し、データ移動コストを削減しませんか?今すぐ ClickPipes を試して、世界最速の分析データベースである ClickHouse Cloud との完全マネージドなネイティブ統合を体験してください。
ClickPipes を試す


