Pub/Sub を使用したストリーム共有

Analytics Hub を通じて Pub/Sub トピックを共有すると、社内外の複数の組織の境界を超えて、ストリーミング データのライブラリをキュレートおよび配信できます。リアルタイムのストリーミング データは、Analytics Hub のエクスチェンジとリスティングを使用して共有されます。これにより、Pub/Sub トピックを論理的に分類してグループ化し、大規模にアクセスをプロビジョニングできます。

ストリーミング データを共有すると、次のことができます。

  • 金融サービス:
    • 急速に変化する証券の価格、相場、注文をリアルタイムで共有する
    • マネー ロンダリングと支払いに関する不正行為を検出する
    • 取引リスクの計算を支援する
  • 小売と日用品(CPG):
    • 店舗がリアルタイムで在庫を管理できるよう支援する
    • マーケティングとカスタマー サポートをパーソナライズする
    • 価格を動的に調整する
    • ソーシャル メディア チャンネルをモニタリングする
    • 実店舗のレイアウトを最適化する
  • 医療:
    • 予測アルゴリズムを活用して患者をモニタリングし、リスクをリアルタイムで分析する
    • ウェアラブル医療機器で主な指標をモニタリングする
    • 患者、医療従事者、施設管理者からのデータの自動取得、構造化、保存、処理
  • 通信:
    • ネットワークの健全性を確認して障害を予測する
    • ユーザーの行動パターンを把握して、デバイスとアンテナの位置をより正確に特定する

ロール

Pub/Sub トピックを共有するためのロールは、次のとおり、BigQuery データセットの共有と同様です。

アーキテクチャ

次の図は、Pub/Sub リソースのパブリッシャーとサブスクライバーが Analytics Hub とやり取りする仕組みを示しています。

Analytics Hub のパブリッシャーと Analytics Hub 間のやり取り。
図 1. Pub/Sub トピックを使用した Analytics Hub パブリッシャーとサブスクライバーのワークフロー。

共有トピック

共有トピックは、Analytics Hub で Pub/Sub トピックを共有する単位です。パブリッシャーは、Pub/Sub トピックを作成するか、既存の Pub/Sub トピックを使用して、サブスクライバーにメッセージ データを配信します。Analytics Hub はソースの Pub/Sub トピックを複製しません。

リスティング

リスティングは、パブリッシャーが共有トピックをエクスチェンジに追加すると作成されます。リスティングには、共有トピックへの参照が含まれています。

エクスチェンジ

エクスチェンジは、共有トピックを参照するリスティングの論理的なグループです。

リンクされた Pub/Sub サブスクリプション

共有トピックのあるリスティングに登録すると、リンクされた Pub/Sub サブスクリプションがサブスクライバー プロジェクトに作成されます。Pub/Sub サブスクリプションは、パブリッシャー プロジェクトでも、Pub/Sub サブスクリプションと Analytics Hub リスティング サブスクリプションとして表示されます。

制限事項

Pub/Sub によるストリーム共有には、次の制限事項があります。

  • 共有トピックに設定できる Pub/Sub サブスクリプションは最大 10,000 個です。この上限には、リンクされた Pub/Sub サブスクリプションと、Analytics Hub の外部で作成された Pub/Sub サブスクリプション(Pub/Sub から直接作成したサブスクリプションなど)が含まれます。
  • 共有トピックは Data Catalog にインデックス登録されますが、リソースタイプをフィルタすることはできません。
  • Analytics Hub でリンクされた Pub/Sub サブスクリプションの使用状況の指標はキャプチャされません。Pub/Sub で使用状況の指標を確認できます。

Analytics Hub API を有効にする

Analytics Hub API を有効にする方法は次のとおりです。

コンソール

API ライブラリに移動し、Google Cloud プロジェクトの Analytics Hub API を有効にします。

Analytics Hub API を有効にする

gcloud

gcloud services enable コマンドを実行します。

gcloud services enable analyticshub.googleapis.com

Pub/Sub API を有効にする

API ライブラリに移動し、Google Cloud プロジェクトの Pub/Sub API を有効にします。

Pub/Sub API を有効にする

パブリッシャーのワークフロー

Analytics Hub のパブリッシャーは、次の操作を行うことができます。

  • リスティングを作成して、共有トピックをエクスチェンジに追加する
  • リスティングを更新する
  • リスティングを削除する
  • リスティングを共有する
  • リスティングのサブスクリプションを管理する
  • リスティングからサブスクライバーを削除する

パブリッシャーの追加の権限

パブリッシャーのタスクを実行するには、エクスチェンジまたはリスティングでの Analytics Hub パブリッシャーのロールroles/analyticshub.publisher)が必要です。アクセスできる組織内のプロジェクト間のすべてのデータ エクスチェンジを表示するには、resourcemanager.organizations.get 権限が必要です。

また、リストに含める Pub/Sub トピックに対する pubsub.topics.setIamPolicy 権限が必要です。スキーマが添付されたトピックを共有するには、トピックに接続されたスキーマに関して Analytics Hub サブスクライバーに pubsub.schemas.get 権限を付与する必要があります。これにより、Analytics Hub の登録ユーザーは Pub/Sub サブスクリプションからメッセージを適切に解析できます。

リスティングを作成する(共有トピックを追加するため)

共有トピックをリスティングに追加するには、次のいずれかのオプションを選択します。

コンソール

  1. Analytics Hub ページに移動します。

    Analytics Hub に移動

    アクセス可能なすべてのデータ エクスチェンジを示すページが表示されます。

  2. リスティングを作成するデータ エクスチェンジの名前をクリックします。

  3. [リスティングを作成] をクリックします。

  4. [リスティングの作成] ページで、[リソースタイプ] プルダウンから [Pub/Sub トピック] を選択します。

  5. [共有トピック] プルダウンで既存の Pub/Sub トピックを選択するか、[トピックを作成] をクリックします。

  6. [リスティングの詳細] ページの [表示名] に、リスティングの名前を入力します。

  7. 必要に応じて、次の詳細情報を入力します。

    • カテゴリ: リスティングを最もよく表すカテゴリを 2 つまで選択します。サブスクライバーは、これらのカテゴリに基づいてリスティングをフィルタできます。

    • データ アフィニティ: パブリッシャーがデータの公開に使用するリージョン。この情報は、サブスクライバーが同じリージョンからデータを読み取ることで、Pub/Sub ネットワークの下り(外向き)費用を最小限に抑えるか回避するのに役立ちます。下り(外向き)費用の詳細については、データ転送の費用をご覧ください。

    • アイコン: リスティングのアイコン。PNG と JPEG のファイル形式がサポートされています。アイコンのファイルサイズは 512 KiB 未満、サイズは 512 x 512 ピクセル以下である必要があります。

    • 説明: リスティングの簡単な説明。サブスクライバーは、説明に基づいてリスティングを検索できます。

    • 一般公開の検出可能性: Analytics Hub カタログ内のリスティングの一般公開の検出可能性を有効にします。リスティングの権限も設定する必要があります。エクスチェンジの [Actions] と [権限を設定] をクリックします。allUsers または allAuthenticatedusersAnalytics Hub 閲覧者のロールを付与します。[一般公開アクセスを許可] をクリックします。

    • [ドキュメント] > [マークダウン]: 関連するドキュメントへのリンクや、サブスクライバーがトピックを使用するために役立つその他の情報などの追加情報。

  8. [リスティングの連絡先情報] ページで、次のオプションの詳細を入力します。

    • 連絡先担当者: リスティングのメインの連絡先のメールアドレスまたは URL を入力します。

    • アクセス権要求の連絡先: サブスクライバーが連絡するためのメールアドレスまたは登録フォームの URL を入力します。

    • プロバイダ: [プロバイダ] セクションを展開し、次のフィールドで詳細を指定します。

      • プロバイダ名: プロバイダの名前。
      • プロバイダの連絡先担当者: トピック プロバイダの連絡先担当者のメールアドレスまたは URL。

      サブスクライバーはデータ プロバイダに基づいてリスティングをフィルタできます。

    • パブリッシャー: [パブリッシャー] セクションを展開し、次のフィールドで詳細を指定します。

      • パブリッシャー名: リスティングを作成しているパブリッシャーの名前。
      • パブリッシャーの連絡先担当者: トピック パブリッシャーの連絡先担当者のメールアドレスまたは URL。
  9. [リスティングのプレビュー] ページを確認します。

  10. [公開] をクリックします。

API

projects.locations.dataExchanges.listings.create メソッドを使用します。

POST https://analyticshub.googleapis.com/v1/projects/PROJECT_ID/location/LOCATION/dataExchanges/DATAEXCHANGE_ID/listings?listingId=LISTING_ID

以下を置き換えます。

  • PROJECT_ID: リスティングを作成するデータ交換を含むプロジェクト ID。
  • LOCATION: データ エクスチェンジのロケーション。Analytics Hub をサポートするロケーションの詳細については、サポート対象のリージョンをご覧ください。
  • DATAEXCHANGE_ID: データ エクスチェンジ ID。
  • LISTING_ID: リスティング ID。

リクエストの本文で、リスティングの詳細を指定します。 リクエストが成功した場合は、レスポンスの本文にリスティングの詳細が含まれます。

API を使用してリスティングに対して実行できるタスクの詳細については、projects.locations.dataExchanges.listings メソッドをご覧ください。

リスティングを更新する

リスティングを更新するには、次のいずれかのオプションを選択します。

コンソール

  1. Analytics Hub ページに移動します。

    Analytics Hub に移動

  2. リスティングを含むデータ交換名をクリックします。

  3. 更新するリスティングをクリックします。

  4. [リスティングを編集] をクリックします。

  5. フィールドの値を変更します。リスティングの共有トピックを除くすべての値を変更できます。

  6. 変更を保存するには、[公開] をクリックします。

API

projects.locations.dataExchanges.listings.patch メソッドを使用します。

PATCH https://analyticshub.googleapis.com/v1/projects/PROJECT_ID/location/LOCATION/dataExchanges/DATAEXCHANGE_ID/listings/LISTING_ID?updateMask=UPDATEMASK

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

  • PROJECT_ID: リスティングを作成するデータ交換を含むプロジェクト ID。
  • LOCATION: データ エクスチェンジのロケーション。Analytics Hub をサポートするロケーションの詳細については、サポート対象のリージョンをご覧ください。
  • DATAEXCHANGE_ID: データ エクスチェンジ ID。
  • LISTING_ID: リスティング ID。
  • UPDATEMASK: 更新するフィールドのリスト。複数の値を更新するには、カンマ区切りのリストを使用します。

リクエストの本文で、更新した値を指定します。

API を使用してリスティングに対して実行できるタスクの詳細については、projects.locations.dataExchanges.listings メソッドをご覧ください。

リスティングを削除する

共有 Pub/Sub トピックを含むリスティングは、有効なサブスクリプションがある状態では削除できません。共有トピックのリスティングの削除を試みる前に、すべての有効なサブスクリプションを取り消してください。リスティングを削除すると、元に戻すことはできません。リスティングを削除するには、次のいずれかの方法を選択します。

コンソール

  1. Analytics Hub ページに移動します。

    Analytics Hub に移動

  2. リスティングを含むデータ交換名をクリックします。

  3. 削除するリスティングをクリックします。

  4. [ 削除] をクリックします。

  5. [リスティングを削除しますか?] ダイアログで「削除」と入力して削除を確定します。

  6. [削除] をクリックします。

API

projects.locations.dataExchanges.listings.delete メソッドを使用します。

DELETE https://analyticshub.googleapis.com/v1/projects/PROJECT_ID/location/LOCATION/dataExchanges/DATAEXCHANGE_ID/listings/LISTING_ID

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

  • PROJECT_ID: リスティングを作成するデータ交換を含むプロジェクト ID。
  • LOCATION: データ エクスチェンジのロケーション。Analytics Hub をサポートするロケーションの詳細については、サポート対象のリージョンをご覧ください。
  • DATAEXCHANGE_ID: データ エクスチェンジ ID。
  • LISTING_ID: リスティング ID。

API を使用してリスティングに対して実行できるタスクの詳細については、projects.locations.dataExchanges.listings メソッドをご覧ください。

リスティングを共有する

ユーザーに非公開リスティングへのアクセスを許可する場合は、そのリスティングに対する個人またはグループの IAM ポリシーを設定する必要があります。商用リスティングの場合、データ エクスチェンジを公開する必要があります。一般公開データ エクスチェンジのリスティングが、すべての Google Cloud ユーザー(allAuthenticatedUsers)の Analytics Hub に表示されます。ユーザーが商用リスティングへのアクセス権を要求できるようにするには、ユーザーに Analytics Hub 閲覧者のロールを付与する必要があります。

ユーザーにリスティングを閲覧したりリスティングに登録したりする権限を付与するには、以下の手順を実施します。

  1. Analytics Hub ページに移動します。

    Analytics Hub に移動

  2. リスティングを含むデータ交換名をクリックします。

  3. サブスクライバーを追加するリスティングをクリックします。

  4. [権限を設定] をクリックします。

  5. プリンシパルを追加するには、 [プリンシパルを追加] をクリックします。

  6. [新しいプリンシパル] フィールドに、リスティングの種類に基づいて次の詳細情報を追加します。

    • 限定公開リスティングの場合は、アクセス権を付与する ID のメールアドレスを入力します。
    • 公開リスティングの場合は、allAuthenticatedUsers を追加します。
  7. [ロールを選択] で、[Analytics Hub] の上にポインタを置き、リスティングの種類に基づいて、次のいずれかのロールを選択します。

    • 商用リスティングの場合は、Analytics Hub 閲覧者のロールを選択します。このロールにより、ユーザーはリスティングを表示してアクセス権を要求できます。
    • 限定公開または商用以外のリスティングの場合は、Analytics Hub サブスクライバーのロールを選択します。このロールにより、ユーザーはリスティングに登録できます。
  8. [保存] をクリックします。

詳しくは、Analytics Hub のサブスクライバーと閲覧者のロールをご覧ください。

サブスクリプションを管理する

ユーザーが共有トピックを含むリスティングに登録できるようにするには、ユーザーに特定のリスティングに対する Analytics Hub サブスクライバーroles/analyticshub.subscriber)と Analytics Hub サブスクリプション オーナーroles/analyticshub.subscriptionOwner)のロールを付与します。

  1. Analytics Hub ページに移動します。

    Analytics Hub に移動

  2. サブスクリプションを管理するリスティングを含むデータ エクスチェンジ名をクリックします。

  3. すべてのサブスクライバーを一覧表示するリスティングをクリックします。

  4. [権限を設定] をクリックします。

  5. プリンシパルを追加するには、 [プリンシパルを追加] をクリックします。

  6. [新しいプリンシパル] フィールドに、追加するサブスクライバーのユーザー名またはメールアドレスを入力します。

  7. [ロールを選択] で、[Analytics Hub] > [Analytics Hub サブスクライバー] を選択します。

  8. [別のロールを追加] をクリックします。

  9. [ロールを選択] で、[Analytics Hub] > [Analytics Hub サブスクリプション オーナー] を選択します。

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

[権限を設定] をクリックすることで、いつでもサブスクライバーの削除および更新を行えます。

サブスクリプションを取り消す

共有トピック リスティングのサブスクリプションを Analytics Hub から削除するには、次のいずれかのオプションを選択します。

コンソール

  1. リスティングのすべてのサブスクライバーを一覧表示するには、すべてのサブスクリプションを表示するに記載されている Google Cloud コンソールの手順を実施します。

  2. [サブスクリプション] タブをクリックします。データ エクスチェンジのすべてのサブスクリプションが表示されます。

  3. 削除するサブスクリプションの横にあるチェックボックスをオンにするか、すべてのサブスクリプションを選択します。

  4. [Revoke subscription?] ダイアログに「revoke」と入力して確定します。

  5. [取り消し] をクリックします。

API

サブスクリプションを削除するには、projects.locations.subscriptions.revoke メソッドを使用します。

POST https://analyticshub.googleapis.com/v1/projects/PROJECT_ID/location/LOCATION/subscriptions/SUBSCRIPTION_ID:revoke

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

  • PROJECT_ID: 削除するサブスクリプションのプロジェクト ID。
  • LOCATION: サブスクリプションのロケーション。
  • SUBSCRIPTION_ID: 削除するサブスクリプションの ID。

Analytics Hub からサブスクリプションを取り消すと、サブスクライバーは共有トピックからメッセージ データを受信しなくなります。Pub/Sub サブスクリプションが共有トピックから切り離されます。Pub/Sub からサブスクリプションを直接削除した場合、Analytics Hub サブスクリプションは保持されるため、クリーンアップする必要があります。

サブスクライバーのワークフロー

Analytics Hub のサブスクライバーは、リスティングを表示して、リスティングに登録できます。共有トピックのリスティングに登録すると、サブスクライバーのプロジェクトにリンクされた Pub/Sub サブスクリプションが 1 つ作成されます。Pub/Sub サブスクリプションは、パブリッシャーのプロジェクトに表示されます。

サブスクライバーの追加の権限

サブスクライバーのタスクを実行するには、プロジェクト、エクスチェンジ、リスティングのレベルで Analytics Hub サブスクライバーroles/analyticshub.subscriber)のロールが必要です。

共有トピック リスティングをサブスクライブする

共有トピックを含むリスティングに登録するには、次のいずれかのオプションを選択します。

コンソール

  1. アクセス可能なリスティングのリストを表示するには、リスティングを表示するの手順に沿って操作します。

  2. リスティングを参照し、登録先のリスティングをクリックします。リスティングの詳細情報を含むダイアログが表示されます。

  3. [Subscribe] をクリックして、[サブスクリプションを作成] ダイアログを開きます。

  4. プロジェクトで Analytics Hub API が有効になっていない場合は、API を有効にするリンクを含むエラー メッセージが表示されます。[Analytics Hub API を有効にする] をクリックします。

  5. [サブスクリプションを作成] ダイアログで、次の詳細を指定します。

    • [サブスクリプション ID]: 作成するサブスクリプションの名前を指定します。
    • [配信タイプ]: メッセージ データを配信するメカニズムを選択します。
    • [メッセージ保持期間]: メッセージの保持期間を設定します。
    • [有効期限]: 非アクティブ状態が続いた後にサブスクリプションが期限切れになるまでの日数(設定する場合)。
    • [確認応答期限]: 確認応答の期限を設定します。
    • [サブスクリプション フィルタ]: メッセージにフィルタ構文を設定します。
    • [1 回限りの配信]: 1 回限りの配信を有効にします。
    • [メッセージの順序指定]: 順序指定キーを使用してメッセージの順序指定を有効にします。
    • [デッド レタリング]: デッド レタリングを有効にします。
    • [再試行ポリシー]: 再試行ポリシーを設定します。

    Pub/Sub サブスクリプション プロパティの詳細については、サブスクリプション プロパティをご覧ください。

  6. 変更を保存するには、[作成] をクリックします。リンクされた Pub/Sub サブスクリプションがプロジェクトに作成されます。

API

projects.locations.dataExchanges.listings.subscribe メソッドを使用します。

POST https://analyticshub.googleapis.com/v1/projects/PROJECT_ID/location/LOCATION/dataExchanges/DATAEXCHANGE_ID/listings/LISTING_ID:subscribe

以下を置き換えます。

  • PROJECT_ID: 登録するリスティングのプロジェクト ID。
  • LOCATION: 登録するリスティングの場所。
  • DATAEXCHANGE_ID: 登録するリスティングのデータ交換 ID。
  • LISTING_ID: 登録するリスティング ID。

リクエストの本文で、リンクされた Pub/Sub サブスクリプションを作成する Pub/Sub サブスクリプションを指定します。成功すると、レスポンスの本文は空になります。

Pub/Sub サブスクリプションの詳細については、サブスクリプションの概要をご覧ください。

料金

Pub/Sub トピックのパブリッシャーが Analytics Hub でトピックを一覧表示して共有する場合、追加料金は発生しません。パブリッシャーは、共有トピックに書き込まれたバイト数の合計(パブリッシュ スループット)と下り(外向き)ネットワーク(該当する場合)に対して課金されます。サブスクライバーは、リンクされたサブスクリプションと下り(外向き)ネットワーク(該当する場合)から読み取られた合計バイト数(サブスクライブ スループット)に対して課金されます。詳しくは、Pub/Sub の料金をご覧ください。

VPC Service Controls

VPC Service Controls の境界が設定されているプロジェクトの共有トピックの場合、パブリッシャーとサブスクライバーにアクセス権を付与するために必要な上り(内向き)ルールと下り(外向き)ルールを設定できます。