メタデータ変更フィードで通知を受け取る

このドキュメントでは、Dataplex Universal Catalog 内のメタデータが作成、更新、削除されたときに Pub/Sub を介して通知を受け取るように、Dataplex Universal Catalog メタデータ変更フィードを構成する方法について説明します。

メタデータ変更フィードの詳細については、メタデータ変更フィードの概要をご覧ください。

始める前に

Pub/SubDataplex Universal Catalog API について理解する。

  1. Enable the Dataplex Universal Catalog and Pub/Sub APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  2. 通知を受信する Pub/Sub トピックを作成します。詳細については、トピックを作成するをご覧ください。

  3. gcloud をインストールしますgcloud の短いエイリアスが設定されていることを確認します。

  4. gcurl のエイリアスを設定します。これにより、認証トークンを含むショートカットが作成され、API リクエストの JSON コンテンツ タイプが設定されます。

    alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    
  5. DATAPLEX_API 変数を設定します。

    DATAPLEX_API="dataplex.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION"
    

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

    • PROJECT_ID: Dataplex API が有効になっているプロジェクト ID
    • LOCATION: ジョブが実行されるロケーション(例: us-central1europe-west3asia-south1

必要なロールと権限

メタデータ変更フィードを構成するには、ユーザーと Dataplex Universal Catalog サービス アカウントに必要な IAM ロールと権限があることを確認します。

ユーザーの役割と権限

メタデータをエクスポートし、メタデータ変更フィード メッセージにアクセスするために必要な権限を取得するには、プロジェクトまたは組織に対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、メタデータのエクスポートとメタデータ変更フィード メッセージへのアクセスに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

メタデータをエクスポートしてメタデータ変更フィード メッセージにアクセスするには、次の権限が必要です。

  • メタデータをエクスポートする:
    • プロジェクトに対する dataplex.metadataFeeds.create
    • フィードのスコープを定義するリソース(組織、プロジェクト、エントリ グループ)に対する dataplex.entryGroups.export
    • プロジェクトに対する resourcemanager.projects.get
    • プロジェクトに対する resourcemanager.projects.list
  • メタデータ変更フィード メッセージにアクセスする:
    • サブスクリプションに対する pubsub.subscriptions.consume
    • トピックに対する pubsub.topics.attachSubscription

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

Dataplex Universal Catalog サービス アカウントのロールと権限

Dataplex Universal Catalog サービス アカウントにメタデータ変更フィード メッセージをパブリッシュするために必要な権限が付与されるように、Dataplex Universal Catalog サービス アカウントに Pub/Sub トピックに対する Pub/Sub パブリッシャー roles/pubsub.publisher)IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

この事前定義ロールには、メタデータ変更フィード メッセージのパブリッシュに必要な pubsub.topics.publish 権限が含まれています。

管理者は、カスタムロールや他の事前定義ロールを使用して、この権限を Dataplex ユニバーサル カタログ サービス アカウントに付与することもできます。

Dataplex Universal Catalog サービス アカウントに権限を付与する

Dataplex Universal Catalog サービス エージェントは、Dataplex API を有効にすると作成されます。サービス エージェントは、次のメールアドレスで識別できます。

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

ここで、PROJECT_NUMBER は Dataplex API を有効にしたプロジェクトのプロジェクト番号です。

Dataplex Universal Catalog サービス アカウントには、Pub/Sub トピックにメッセージをパブリッシュする権限が必要です。この権限を付与するには、Pub/Sub トピックに対する Pub/Sub パブリッシャーのロールroles/pubsub.publisher)をサービス アカウントに付与します。

gcloud

gcloud pubsub topics add-iam-policy-binding コマンドを実行します。

gcloud pubsub topics add-iam-policy-binding TOPIC_ID \
    --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com" \
    --role="roles/pubsub.publisher"

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

  • TOPIC_ID: メタデータ変更フィード メッセージが公開される Pub/Sub トピックの ID。
  • PROJECT_NUMBER: サービス アカウントが配置されている Dataplex Universal Catalog プロジェクトのプロジェクト番号。

コンソール

  1. Google Cloud コンソールで、Pub/Sub の [トピック] ページに移動します。

    トピックに移動

  2. メタデータ フィード通知に使用しているトピックを選択し、必要に応じて [情報パネルを表示] をクリックします。

  3. [権限] タブで、[プリンシパルを追加] をクリックします。

  4. [新しいプリンシパル] フィールドに、Dataplex Universal Catalog サービス アカウント(service-PROJECT_NUMBER@gcp-sa-dataplex.iam.gserviceaccount.com)を入力します。

  5. [ロールを割り当てる] フィールドで、[Pub/Sub パブリッシャー] を選択します。

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

メタデータ変更フィードを作成する

通知を生成する変更を制御するには、特定のリソースをモニタリングするようにメタデータ変更フィードを構成します。これを行うには、組織全体、特定のプロジェクト、特定のエントリ グループなどのスコープを指定します。スコープを使用すると、モニタリングするリソースを定義できますが、フィルタを使用すると、Dataplex Universal Catalog が通知を送信するタイミングをさらに絞り込むことができます。

詳細については、メタデータ変更フィードをご覧ください。

REST

メタデータ変更フィードを作成するには、projects.locations.metadataFeeds.create メソッドを使用します。

組織スコープ

次のコマンドを実行して、組織全体をモニタリングするメタデータ変更フィードを作成します。

gcurl -X POST -d "$(cat <<EOF
{
  "scope": {
    "organizationLevel": true
  },
  "pubsubTopic": "projects/PROJECT_ID_PUBSUB/topics/TOPIC_ID"
}
EOF
)" "https://${DATAPLEX_API}/metadataFeeds?metadataFeedId=FEED_ID"

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

  • PROJECT_ID_PUBSUB: Pub/Sub トピックが配置されているプロジェクト ID(例: example-project
  • TOPIC_ID: メタデータ変更フィード メッセージが公開される Pub/Sub トピック ID(例: example-topic
  • FEED_ID: 作成するメタデータ変更フィード ID(例: example-feed

プロジェクトのスコープ

特定のプロジェクトをモニタリングするメタデータ変更フィードを作成するには、次のコマンドを実行します。

gcurl -X POST -d "$(cat <<EOF
{
  "scope": {
    "projects": [
      "projects/PROJECT_ID_1",
      "projects/PROJECT_ID_2"
    ]
  },
  "pubsubTopic": "projects/PROJECT_ID_PUBSUB/topics/TOPIC_ID"
}
EOF
)" "https://${DATAPLEX_API}/metadataFeeds?metadataFeedId=FEED_ID"

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

  • PROJECT_ID_PUBSUB: Pub/Sub トピックが配置されているプロジェクト ID(例: example-project
  • TOPIC_ID: メタデータ変更フィード メッセージが公開される Pub/Sub トピック ID(例: example-topic
  • FEED_ID: 作成するメタデータ変更フィード ID(例: example-feed

エントリ グループのスコープ

次のコマンドを実行して、特定のエントリ グループをモニタリングするメタデータ変更フィードを作成します。

gcurl -X POST -d "$(cat <<EOF
{
  "scope": {
    "entryGroups": [
      "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID_1",
      "projects/PROJECT_ID/locations/LOCATION/entryGroups/ENTRY_GROUP_ID_2"
    ]
  },
  "pubsubTopic": "projects/PROJECT_ID_PUBSUB/topics/TOPIC_ID"
}
EOF
)" "https://${DATAPLEX_API}/metadataFeeds?metadataFeedId=FEED_ID"

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

  • PROJECT_ID_PUBSUB: Pub/Sub トピックが配置されているプロジェクト ID(例: example-project
  • LOCATION: フィードを作成するロケーション(例: us-central1
  • ENTRY_GROUP_ID: モニタリングするエントリ グループ ID(例: example-entry-group
  • TOPIC_ID: メタデータ変更フィード メッセージが公開される Pub/Sub トピック ID(例: example-topic
  • FEED_ID: 作成するメタデータ変更フィード ID(例: example-feed

フィルタあり

次のコマンドを実行して、フィルタ(エントリタイプでフィルタ)を使用してメタデータ変更フィードを作成します。

gcurl -X POST -d "$(cat <<EOF
{
  "scope": {
    "projects": [
      "projects/PROJECT_ID_1",
      "projects/PROJECT_ID_2"
    ]
  },
  "filter": {
    "entryTypes": [
      "projects/PROJECT_ID/locations/global/entryTypes/bigquery-table"
    ]
  },
  "pubsubTopic": "projects/PROJECT_ID_PUBSUB/topics/TOPIC_ID"
}
EOF
)" "https://${DATAPLEX_API}/metadataFeeds?metadataFeedId=FEED_ID"

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

  • PROJECT_ID_PUBSUB: Pub/Sub トピックが配置されているプロジェクト ID(例: example-project
  • TOPIC_ID: メタデータ変更フィード メッセージが公開される Pub/Sub トピック ID(例: example-topic
  • FEED_ID: 作成するメタデータ変更フィード ID(例: example-feed

対応:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.dataplex.v1.OperationMetadata",
    "createTime": "2023-10-02T15:01:23Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/metadataFeeds/FEED_ID",
    "verb": "create",
    "apiVersion": "v1"
  },
  "done": false
}

メタデータの変更フィードを表示する

メタデータ変更フィードの詳細を表示できます。

REST

メタデータ変更フィードを表示するには、projects.locations.metadataFeeds.get メソッドを使用します。

次のコマンドを実行します。

gcurl "https://${DATAPLEX_API}/metadataFeeds/FEED_ID"

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

  • FEED_ID: 表示するメタデータ変更フィード ID(例: example-feed

メタデータ変更フィードの一覧を取得する

プロジェクトとロケーションのメタデータ変更フィードを一覧表示できます。

REST

メタデータ変更フィードを一覧表示するには、projects.locations.metadataFeeds.list メソッドを使用します。

次のコマンドを実行します。

gcurl "https://${DATAPLEX_API}/metadataFeeds"

メタデータ変更フィードを更新する

既存のメタデータ変更フィードのスコープまたはフィルタを更新できます。

REST

メタデータ変更フィードを更新するには、projects.locations.metadataFeeds.patch メソッドを使用します。

次のコマンドを実行して、メタデータ変更フィードを更新し、エントリ タイプ フィルタを削除します。

gcurl -X PATCH -d "$(cat <<EOF
{
  "filter": {
    "entryTypes": []
  }
}
EOF
)" "https://${DATAPLEX_API}/metadataFeeds/FEED_ID?updateMask=filter"

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

  • FEED_ID: 更新するメタデータ変更フィード ID(例: example-feed

メタデータ変更フィードを削除する

通知を受け取る必要がなくなった場合は、メタデータ変更フィードを削除できます。

メタデータ変更フィードを削除すると、フィードが新しいメタデータ変更を Pub/Sub トピックにパブリッシュしなくなります。ただし、フィードに関連付けられているトピックやサブスクリプションは削除されません。不要になった場合は、手動で削除する必要があります。

フィードまたはサブスクリプションを削除する前に、サブスクライバー アプリケーションが Pub/Sub サブスクリプションの未処理のメッセージをすべて処理していることを確認してください。

REST

メタデータ変更フィードを削除するには、projects.locations.metadataFeeds.delete メソッドを使用します。

次のコマンドを実行します。

gcurl -X DELETE \
"https://${DATAPLEX_API}/metadataFeeds/FEED_ID"

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

  • FEED_ID: 削除するメタデータ変更フィード ID(例: example-feed

通知メッセージを使用する

メタデータ変更フィードを構成すると、メタデータの変更が発生したときに、Dataplex Universal Catalog は指定された Pub/Sub トピックにメッセージをパブリッシュします。これらのメッセージを使用するには、トピックに対する Pub/Sub サブスクリプションを作成します。

たとえば、pull サブスクリプションを作成し、Google Cloud CLI を使用してメッセージを表示できます。

  1. サブスクリプションを作成します。

    gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_ID
    

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

    • SUBSCRIPTION_ID: 作成するサブスクリプション ID
    • TOPIC_ID: メタデータ変更フィード メッセージが公開される Pub/Sub トピック ID。
  2. サブスクリプションからメッセージを pull します。

    gcloud pubsub subscriptions pull SUBSCRIPTION_ID --auto-ack --limit=10
    

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

    • SUBSCRIPTION_ID: メッセージを pull するサブスクリプション ID

Pub/Sub メッセージの処理の詳細については、プル サブスクリプションからメッセージを受信するをご覧ください。メッセージ形式については、データ ペイロードをご覧ください。

次のステップ