Cloud SQL for PostgreSQL ソースコネクタを作成する

このドキュメントでは、Kafka Connect 用の Cloud SQL for PostgreSQL ソースコネクタを作成する方法について説明します。

Cloud SQL for PostgreSQL ソースコネクタは、 Debezium PostgreSQL コネクタのインスタンスです。 Cloud SQL for PostgreSQL データベースから行レベルの変更を読み取り、 Managed Service for Apache Kafka クラスタのトピックに書き込みます。

このコネクタのユースケースは次のとおりです。

  • 行レベルのデータベースの変更をリアルタイムでモニタリングする。
  • データベースの変更イベントをイベント ドリブン アーキテクチャに統合する。
  • 行の挿入や削除などのデータベース イベントに対応する。
  • データベースの変更を他のシステムにコピーする。

始める前に

Cloud SQL for PostgreSQL ソースコネクタを作成する前に、次のものがあることを確認してください。

必要なロールと権限

コネクタの作成に必要な権限を取得するには、プロジェクトに対するManaged Kafka コネクタ編集者 roles/managedkafka.connectorEditor)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには コネクタの作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

コネクタを作成するには、次の権限が必要です。

  • コネクタを作成する: managedkafka.connectors.create

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

Cloud SQL から読み取る権限を付与する

Managed Kafka サービス アカウントには、Cloud SQL for PostgreSQL にアクセスする権限が必要です。次の IAM ロールをサービス アカウントに付与します。

  • Cloud SQL クライアントroles/cloudsql.client
  • Cloud SQL インスタンス ユーザーroles/cloudsql.instanceUser

Managed Kafka サービス アカウントの形式は service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com です。ここで、PROJECT_NUMBER は Connect クラスタのプロジェクト番号です。

Connect クラスタが Managed Service for Apache Kafka クラスタとは異なるプロジェクトにある場合は、 別のプロジェクトに Connect クラスタを作成するをご覧ください。

データベースを構成する

コネクタを作成する前に、データベース レプリケーションを構成し、コネクタがデータベースで認証できるようにする必要があります。次のセクションでは、これらの手順について説明します。

論理デコーディングを有効にする

Cloud SQL for PostgreSQL ソースコネクタは、PostgreSQL の 論理デコーディング 機能に依存しています。Cloud SQL for PostgreSQL インスタンスで論理デコーディングを有効にするには、次の操作を行います。

コンソール

  1. [Cloud SQL] [>] [インスタンス] に移動します。

    [インスタンス] に移動

  2. インスタンスの名前をクリックします。

  3. [ Edit] をクリックします。

  4. [フラグとパラメータ] を開きます。

  5. [データベース フラグを追加] をクリックします。

  6. [フラグの選択] リストで、cloudsql.logical_decoding を選択します。

  7. [] で On を選択します。

  8. [完了] をクリックします。

  9. [保存] をクリックします。

詳細については、 論理レプリケーションとデコードを設定するをご覧ください。

変更データ キャプチャ(CDC)を構成する

インスタンスで論理デコーディングを有効にしたら、レプリケートするテーブルの変更データ キャプチャ(CDC)を有効にします。

テーブルの CDC を有効にするには、CREATE PUBLICATION SQL ステートメントを実行します。この ステートメントは、レプリケートするテーブルのグループを定義するパブリケーションを作成します。

  • オプション 1 。データベース内のすべてのテーブルの変更をレプリケートするパブリケーションを作成します。

    CREATE PUBLICATION dbz_publication FOR ALL TABLES;
    
  • オプション 2 。特定のテーブルセットのパブリケーションを作成します。

    CREATE PUBLICATION dbz_publication FOR TABLE TABLE_LIST;
    

    TABLE_LIST は、 テーブルのカンマ区切りのリストに置き換えます。形式は "schema_name"."table_name" です。スキーマ名とテーブル名を二重引用符で囲むと、名前に特殊文字や大文字が含まれている場合に構文エラーが発生するのを防ぐことができます。

デフォルトでは、コネクタはパブリケーション名に dbz_publication を使用します。別の名前のパブリケーションを使用するには、 パブリケーション名をご覧ください。

Managed Kafka サービス アカウントのユーザー アカウントを作成する

Cloud SQL for PostgreSQL ソースコネクタは、 IAM データベース認証 を使用してデータベースに接続します。IAM データベース認証を有効にするには、次のように Managed Kafka サービス アカウントを Cloud SQL インスタンスに追加します。

コンソール

  1. [Cloud SQL] > [インスタンス] に移動します。

    [インスタンス] に移動

  2. インスタンスの名前をクリックします。

  3. ナビゲーション ペインで [ユーザー] をクリックします。

  4. [ユーザー アカウントを追加] をクリックします。

  5. [ユーザー アカウントを追加] パネルで、[Cloud IAM] を選択します。

  6. [IAM プリンシパル] フィールドに、次の値を入力します。

    service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com
    

    PROJECT_NUMBER は、Connect クラスタのプロジェクト番号に置き換えます。

  7. [追加] をクリックします。

gcloud

gcloud sql users create コマンドを実行します。

gcloud sql users create service-PROJECT_NUMBER@gcp-sa-managedkafka.iam \
  --instance=INSTANCE_NAME \
  --type=cloud_iam_service_account

次のように置き換えます。

  • PROJECT_NUMBER: Connect クラスタのプロジェクト番号。

  • INSTANCE_NAME: Cloud SQL for PostgreSQL インスタンスの名前。

データベースのユーザー名には長さの上限があるため、 .gserviceaccount.comサフィックスが ユーザー名から削除され、ユーザー名は service-PROJECT_NUMBER@gcp-sa-managedkafka.iamになります。IAM ユーザー アカウントを参照する SQL クエリを実行する場合は、 切り捨てられた名前を指定します。

ユーザー アカウントを構成する

IAM ユーザー アカウントを作成したら、cloudsqlsuperuser ロールを持つユーザー(デフォルトの postgres ユーザーなど)としてデータベースに接続し、次の SQL クエリを実行します。

コンソール

  1. ユーザーが Write-Ahead ログを読み取れるようにします。

    ALTER USER "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam" WITH REPLICATION;
    
  2. テーブルに対する SELECT 権限をユーザーに付与します。

    GRANT SELECT ON ALL TABLES IN SCHEMA "SCHEMA_NAME"
    TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";
    

    または、個々のテーブルに対する SELECT 権限を付与することもできます。このオプションを選択する場合は、コネクタの table.include.list 構成プロパティを許可されたテーブルのリストに設定する必要があります。 次の SQL クエリは、単一のテーブルに対する SELECT 権限を付与します。

    GRANT SELECT ON TABLE SCHEMA_NAME.TABLE_NAME
    TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";
    
  3. テーブルごとに、ユーザーにテーブルのスキーマへのアクセス権を付与します。テーブルがデフォルトの public スキーマにある場合は、この手順をスキップできます。

    GRANT USAGE ON SCHEMA SCHEMA_NAME
    TO "service-PROJECT_NUMBER@gcp-sa-managedkafka.iam";
    

ネットワークを構成する

Cloud SQL for PostgreSQL ソースコネクタは、次の方法で Cloud SQL インスタンスに接続できます。

  • プライベート IP
  • Private Service Connect
  • パブリック IP

これらのオプションの詳細については、 Cloud SQL への接続方法を選択するをご覧ください。 セキュリティのベスト プラクティスとして、プライベート IP または Private Service Connect を使用することをおすすめします。これらのオプションでは、外部 IP アドレスに接続する必要がないためです。

次の表に、各オプションのネットワーク要件を示します。

IP アドレスの種類 要件
プライベート IP インスタンスのプライベート IP を構成します。詳細については、 プライベート IP を構成するをご覧ください。
Private Service Connect
  1. インスタンスの Private Service Connect を構成し、Private Service Connect エンドポイントの DNS 名を取得します。詳細については、 Private Service Connect を使用してインスタンスに接続するをご覧ください。
  2. エンドポイントの DNS 名を Connect クラスタの 解決可能な DNS ドメインに追加します。詳細については、 Connect クラスタを更新するをご覧ください。
パブリック IP
  1. インスタンスのパブリック IP を構成します。詳細については、 パブリック IP を構成するをご覧ください。
  2. Public NAT を設定して、Connect クラスタのワーカーが インターネットと通信できるようにします。詳細については、 Public NAT を設定するをご覧ください。Cloud NAT ゲートウェイを作成するときは、Connect クラスタの プライマリ サブネットを含む VPC ネットワークを指定します。

Cloud SQL for PostgreSQL ソースコネクタを作成する

Cloud SQL for PostgreSQL ソースコネクタを作成する手順は次のとおりです。

コネクタが初期化されると、次の処理が行われます。

  1. データベースの初期スナップショットを作成します。
  2. 行を含むテーブルごとに Kafka トピックを作成します。
  3. データベースの行ごとに、対応するトピックに変更イベントを送信します。

コネクタの実行中は、トピックに変更イベントが送信され続けます。初期スナップショットの詳細については、Debezium ドキュメントの スナップショット をご覧ください。

コンソール

  1. コンソール Google Cloud で、[Connect クラスタ] ページに移動します。

    [Connect クラスタ] に移動

  2. コネクタを作成する Connect クラスタをクリックします。

  3. [コネクタを作成] をクリックします。

  4. コネクタ名に文字列を入力します。

    コネクタの命名方法のガイドラインについては、 Managed Service for Apache Kafka リソースの命名ガイドラインをご覧ください。

  5. [コネクタ プラグイン] で [Cloud SQL for PostgreSQL ソース] を選択します。

  6. [インスタンス] リストで、Cloud SQL インスタンスを選択します。

  7. [データベース] リストで、Cloud SQL データベースを選択します。

  8. [トピック プレフィックス] フィールドに、Kafka トピック名に使用するプレフィックスを入力します。Cloud SQL for PostgreSQL ソースコネクタごとに一意のプレフィックスを選択します。

  9. 省略可: [テーブル名] フィールドに、変更データを読み取るテーブルのカンマ区切りリストを "schema_name"."table_name" 形式で入力します。このフィールドを空のままにすると、コネクタはデータベース内のすべての非システム テーブルから変更データを読み取ります。

  10. 省略可: [構成] ボックスで、構成プロパティを追加するか、デフォルトのプロパティを編集します。詳細については、 コネクタを構成するをご覧ください。

    次のプロパティのデフォルトをオーバーライドする必要がある場合があります。

  11. 省略可: [タスクの再起動ポリシー] を選択します。詳細については、 タスクの再起動ポリシーをご覧ください。

  12. [作成] をクリックします。

gcloud

  1. コンソール Google Cloud で Cloud Shell をアクティブにします。

    Cloud Shell をアクティブにする

    コンソールの下部にある Google Cloud Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です 。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています 。セッションが初期化されるまで数秒かかることがあります。

  2. gcloud managed-kafka connectors create コマンドを実行します。

    gcloud managed-kafka connectors create CONNECTOR_ID \
        --location=LOCATION \
        --connect-cluster=CONNECT_CLUSTER_ID \
        --config-file=CONFIG_FILE
    

    次のように置き換えます。

    • CONNECTOR_ID: コネクタの ID または名前。 コネクタの命名方法のガイドラインについては、 Managed Service for Apache Kafka リソースの命名ガイドラインをご覧ください。 コネクタの名前は変更できません。

    • LOCATION: コネクタを作成するロケーション。これは、 Connect クラスタを作成したロケーションと同じにする必要があります。

    • CONNECT_CLUSTER_ID: コネクタが作成される Connect クラスタの ID。

    • CONFIG_FILE: コネクタの YAML 構成ファイルのパス。

    Cloud SQL for PostgreSQL ソースコネクタの構成ファイルの例を次に示します。

    connector.class: io.debezium.connector.postgresql.PostgresConnector
    database.dbname: DATABASE_NAME
    driver.cloudSqlInstance: INSTANCE_ID
    driver.enableIamAuth: "true"
    driver.ipTypes: IP_TYPES
    driver.sslmode: disable
    key.converter: org.apache.kafka.connect.json.JsonConverter
    key.converter.schemas.enable: "false"
    plugin.name: pgoutput
    slot.name: SLOT_NAME
    table.include.list: TABLE_LIST
    topic.prefix: TOPIC_PREFIX
    value.converter: org.apache.kafka.connect.json.JsonConverter
    value.converter.schemas.enable: "true"
    

    次のように置き換えます。

    • INSTANCE_ID: データベースを含む Cloud SQL インスタンスの ID。形式は次のとおりです。

      PROJECT_ID:REGION:INSTANCE_NAME
      
    • DATABASE_NAME: 読み取る Cloud SQL データベースの名前。

    • IP_TYPES: IP アドレスの種類のカンマ区切りリスト

    • SLOT_NAME: 作成する レプリケーション スロットの名前。

    • TABLE_LIST: 変更データを読み取るテーブルのカンマ区切りリスト("schema_name"."table_name" 形式)。

    • TOPIC_PREFIX: Kafka トピック名に使用するプレフィックス。

コネクタを構成する

このセクションでは、コネクタに設定できる構成プロパティについて説明します。完全なリストについては、 Debezium ドキュメントの Debezium コネクタ for PostgreSQL をご覧ください。

IP アドレスの種類

driver.ipTypes プロパティは、コネクタがデータベースへの接続に使用する IP アドレスのタイプを指定します。

  • PRIVATE: プライベート IP
  • PSC: Private Service Connect
  • PUBLIC: パブリック IP

driver.ipTypes プロパティには、優先順位で並べられた IP タイプのカンマ区切りのリストが含まれます(例: driver.ipTypes=PRIVATE,PUBLIC)。

詳細については、ネットワークを構成するをご覧ください。

パブリケーション名

デフォルトでは、コネクタは dbz_publication という名前のパブリケーションからストリーミングしようとします。 別のパブリケーションを指定するには、構成に publication.name=PUBLICATION_NAME を追加します。ここで PUBLICATION_NAME はパブリケーション名です。例: publication.name=my_publication

レプリケーション スロット

PostgreSQL は、レプリケーション スロットを使用してデータベース テーブルの変更をストリーミングします。 デフォルトでは、コネクタは debezium という名前のレプリケーション スロットを作成します。別のスロット名を使用するには、slot.name プロパティを設定します。

同じデータベースに対してコネクタの 2 つのインスタンスを作成する場合は、コネクタごとに一意のスロット名を指定する必要があります。

デフォルトでは、コネクタはデータ損失を防ぐために slot.drop.on.stop プロパティを false に設定します。コネクタを完全に削除する場合は、コネクタが使用していたレプリケーション スロットを手動で削除する必要があります。レプリケーション スロット名は、 別の構成にしない限り、デフォルトで debeziumになります。slot.name

ソース PostgreSQL データベース サーバーの WAL ディスク使用量をモニタリングし、使用されていないレプリケーション スロットを削除するアラートを設定することをおすすめします。

テーブルのフィルタ

デフォルトでは、コネクタはデータベース内のすべての非システム テーブルから変更データをキャプチャします。キャプチャするテーブルをフィルタリングするには、次の設定を 1 つ以上指定します。

  • schema.include.list。含めるスキーマのリスト。
  • schema.exclude.list。除外するスキーマのリスト。 と一緒に使用することはできませんschema.include.list
  • table.include.list。含めるテーブルのリスト。
  • table.exclude.list。除外するテーブルのリスト。 と一緒に使用することはできませんtable.include.list.

トピック名

デフォルトでは、コネクタは次の命名規則で Kafka トピックを作成します。topic_prefix.schema.table_name。ここで、topic.prefixtopic.prefix 構成の値です。

詳細については、Debezium ドキュメントの トピック名をご覧ください。

次のステップ