Azure Event Hubs インポート トピックを作成する

Azure Event Hubs インポート トピックを使用すると、Azure Event Hubs から外部ソースとして Pub/Sub にデータを継続的に取り込むことができます。その後、Pub/Sub がサポートしている任意の宛先にデータをストリーミングできます。

このドキュメントでは、Azure Event Hubs インポート トピックの作成と管理方法について説明します。標準トピックを作成するには、標準トピックを作成するをご覧ください。

インポート トピックの詳細については、インポート トピックについてをご覧ください。

始める前に

必要なロールと権限

Azure Event Hubs インポート トピックの作成と管理に必要な権限を取得するには、トピックまたはプロジェクトに対する Pub/Sub 編集者 roles/pubsub.editor)の IAM ロールを付与するように管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

この事前定義ロールには、Azure Event Hubs インポート トピックの作成と管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

Azure Event Hubs インポート トピックを作成して管理するには、次の権限が必要です。

  • インポート トピックを作成する: pubsub.topics.create
  • インポート トピックを削除する: pubsub.topics.delete
  • インポート トピックを取得する: pubsub.topics.get
  • インポート トピックを一覧表示する: pubsub.topics.list
  • インポート トピックに公開する: pubsub.topics.publish
  • インポート トピックを更新する: pubsub.topics.update
  • インポート トピックの IAM ポリシーを取得する: pubsub.topics.getIamPolicy
  • インポート トピックの IAM ポリシーを構成する: pubsub.topics.setIamPolicy

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

アクセス制御は、プロジェクト レベルと個々のリソースレベルで構成できます。

Azure Event Hubs にアクセスするためのフェデレーション ID を設定する

Workload Identity 連携を使用すると、 Google Cloud サービスが外部で実行されているワークロードにアクセスできるようになります。 Google CloudID 連携を使用すれば、他のクラウドのリソースにアクセスするために認証情報を維持したり、 Google Cloud に渡したりする必要がなくなります。代わりに、ワークロード自体の ID を使用して Google Cloud 認証を行い、リソースにアクセスできます。

Google Cloudにサービス アカウントを作成する

このステップの実行は任意です。すでにサービス アカウントがある場合は、新しいサービス アカウントを作成せずに、そのサービス アカウントをこの手順で使用できます。既存のサービス アカウントを使用している場合は、次のステップのためにサービス アカウントの一意の ID を記録するに進みます。

Azure Event Hubs インポート トピックの場合、Pub/Sub はサービス アカウントを ID として使用して、Azure からリソースにアクセスします。

前提条件、必要なロールと権限、命名ガイドラインなど、サービス アカウントの作成の詳細については、サービス アカウントを作成するをご覧ください。サービス アカウントの作成後、サービス アカウントが使用できるようになるまでに 60 秒以上かかる場合があります。この動作は、読み取りオペレーションが結果整合性に基づいているためです。新しいサービス アカウントが利用可能になるまで時間がかかることがあります。

サービス アカウントの一意の ID を記録する

Azure でアプリ登録を設定するには、サービス アカウントの一意の ID が必要です。

  1. Google Cloud コンソールで、[サービス アカウント] の詳細ページに移動します。

    [サービス アカウント] に移動

  2. 作成したサービス アカウントまたは使用する予定のサービス アカウントをクリックします。

  3. [サービス アカウントの詳細] ページで、一意の ID 番号を記録します。

    Azure でのアプリ登録を設定するには、ワークフローの一部として ID が必要です。

サービス アカウント トークン作成者のロールを Pub/Sub サービス アカウントに追加する

サービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)を使用すると、プリンシパルはサービス アカウントに有効期間の短い認証情報を作成できます。これらのトークンまたは認証情報は、サービス アカウントの権限を借用するために使用されます。

サービス アカウントの権限借用の詳細については、サービス アカウントの権限借用をご覧ください。

この手順で Pub/Sub パブリッシャーのロールroles/pubsub.publisher)を追加することもできます。ロールの詳細、およびロールを追加する理由については、Pub/Sub パブリッシャーのロールを Pub/Sub サービス アカウントに追加するをご覧ください。

  1. Google Cloud コンソールの [IAM] ページに移動します。

    IAM に移動

  2. [Google 提供のロール付与を含める Google] チェックボックスをオンにします。

  3. service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com 形式のサービス アカウントを探します。

  4. このサービス アカウントで [プリンシパルを編集] ボタンをクリックします。

  5. 必要に応じて、[別のロールを追加] をクリックします。

  6. サービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)を検索してクリックします。

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

ID 連携を使用してアプリ登録を作成する

Azure Event Hubs からデータを取り込むには、Microsoft Identity Platform にアプリケーションを登録し、サービス アカウントの ID 連携を有効にします。これにより、サービス アカウントは Azure に対して認証できるようになります。

Microsoft Identity Platform にアプリケーションを登録する方法については、Azure アプリ登録クイックスタートをご覧ください。

  1. Azure Portal にログインし、[Microsoft Entra ID] ページを開きます。

  2. ナビゲーション パネルで、[管理] > [アプリ登録] をクリックします。

  3. [新規登録] をクリックします。

  4. アプリケーションに名前を付け、[サポートされているアカウントの種類] を [個人用 Microsoft アカウントのみ] 以外に設定します。

  5. アプリケーションを登録するには、[登録] をクリックします。

  6. アプリケーションを開き、[管理] > [証明書とシークレット] をクリックします。

  7. [認証情報を追加] をクリックします。

  8. 連携認証情報を構成するには、[その他の発行元] をクリックします。

  9. [発行元] フィールドに「https://accounts.google.com」と入力します。

  10. [Value] フィールドに、Pub/Sub サービス アカウントの一意の ID を入力します。

    この ID は、サービス アカウントの一意の ID を記録するで確認できます。

  11. 連携 ID に名前を付けて、[追加] をクリックします。

登録済みのアプリにロールの割り当てを付与する

Pub/Sub が Azure Event Hub から読み取れるようにするには、登録済みアプリに必要なロールを付与します。

  1. Azure Portal にログインし、Event Hubs Namespace を開きます。

    名前空間を開くには、検索に「Event Hubs」と入力し、いずれかの名前空間をクリックします。

  2. サイドバーで [アクセス制御(IAM)] をクリックします。

  3. [追加] > [ロールの割り当てを追加] をクリックします。

  4. [Azure Event Hubs Data Receiver] ロールを選択し、[次へ] をクリックします。

    これにより、Pub/Sub サービス アカウントに Azure Event Hub に対する読み取りアクセス権が付与されます。

  5. [+Select members] をクリックし、登録したアプリを検索します。

  6. 登録済みのアプリ名を検索フィールドに入力します。

  7. アプリの名前をクリックし、[選択] をクリックします。

  8. [レビュー + 割り当て] をクリックします。

  9. 手順 3 ~ 6 を繰り返し、Azure Event Hubs Data Sender ロールを追加します。

    このロールにより、Google Cloud サービス アカウントに Azure Event Hub からメタデータを取得する権限が付与されます。

Azure ロールの割り当ての詳細については、Azure ロールを割り当てるをご覧ください。

Pub/Sub プリンシパルに Pub/Sub パブリッシャーのロールを追加する

パブリッシュを有効にするには、Pub/Sub が Azure Event Hubs インポート トピックにパブリッシュできるように、Pub/Sub サービス アカウントにパブリッシャーのロールを割り当てる必要があります。

すべてのトピックからのパブリッシュを有効にする

Azure Event Hubs インポート トピックを作成していない場合は、この方法を使用します。

  1. Google Cloud コンソールの [IAM] ページに移動します。

    IAM に移動

  2. [Google 提供のロール付与を含める Google] チェックボックスをオンにします。

  3. service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com 形式のサービス アカウントを探します。

  4. このサービス アカウントで [プリンシパルを編集] ボタンをクリックします。

  5. 必要に応じて、[別のロールを追加] をクリックします。

  6. Pub/Sub パブリッシャーのロールroles/pubsub.publisher)を検索してクリックします。

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

単一トピックからのパブリッシュを有効にする

この方法は、Azure Event Hubs インポート トピックがすでに存在する場合にのみ使用します。

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

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

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

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

    • TOPIC_ID: Azure Event Hubs インポート トピックのトピック ID。

    • PROJECT_NUMBER: プロジェクト番号。プロジェクト番号を表示するには、プロジェクトを特定するをご覧ください。

サービス アカウントのユーザーロールをサービス アカウントに追加する

サービス アカウント ユーザーのロールroles/iam.serviceAccountUser)には、プリンシパルがサービス アカウントを Azure Event Hubs インポート トピックの取り込み設定に接続し、そのサービス アカウントを連携 ID に使用できるようにする権限 iam.serviceAccounts.actAs が含まれています。

  1. Google Cloud コンソールの [IAM] ページに移動します。

    IAM に移動

  2. トピックの作成または更新の呼び出しを発行するプリンシパルに対して、[プリンシパルを編集] ボタンをクリックします。

  3. 必要に応じて、[別のロールを追加] をクリックします。

  4. サービス アカウント ユーザーのロールroles/iam.serviceAccountUser)を検索してクリックします。

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

Azure Event Hubs インポート トピックを使用する

新しいインポート トピックを作成することも、既存のトピックを編集することもできます。

考慮事項

  • トピックとサブスクリプションを別々に作成すると、連続して作成した場合でもデータが失われる可能性があります。定期購入なしでトピックが存在する期間は短いです。この間にトピックにデータが送信された場合、そのデータは失われます。まずトピックを作成し、サブスクリプションを作成してから、トピックをインポート トピックに変換することで、インポート プロセス中にメッセージが失われることがなくなります。

  • 既存のインポート トピックの Azure Event Hub を同じ名前で再作成する必要がある場合、Azure Event Hub を削除して再作成するだけでは不十分です。この操作により、Pub/Sub のオッサフ管理が無効になり、データが失われる可能性があります。この問題を軽減する手順は次のとおりです。

    • Pub/Sub インポート トピックを削除する
    • Azure Event Hub を削除する
    • Azure Event Hub を作成する
    • Pub/Sub インポート トピックを作成する
  • Azure Event Hub のデータは、常に最も早いオフセットから読み取られます。

Azure Event Hubs インポート トピックを作成する

トピックに関連付けられたプロパティの詳細については、トピックのプロパティをご覧ください。

次の手順を完了していることを確認してください。

Azure Event Hubs インポート トピックを作成する手順は次のとおりです。

Console

  1. Google Cloud コンソールの トピック ページに移動します。

    [トピック] に移動

  2. [トピックを作成] をクリックします。

  3. [トピック ID] フィールドに、Azure Event Hubs インポート トピックの ID を入力します。トピックの命名の詳細については、命名ガイドラインをご覧ください。

  4. [デフォルトのサブスクリプションを追加する] を選択します。

  5. [取り込みを有効にする] を選択します。

  6. 取り込み元として [Azure Event Hubs] を選択します。

  7. 次の詳細情報を入力します。

    • リソース グループ: Pub/Sub に取り込む予定の Azure Event Hubs 名前空間を含む Azure リソース グループの名前。

    • Event Hub 名前空間: Pub/Sub に取り込む Azure Event Hub を含む Azure Event Hubs 名前空間の名前。

    • Event Hub: Pub/Sub に取り込む予定の Azure Event Hub の名前。

    • クライアント ID: Google Cloud サービス アカウントのフェデレーション ID を含む、Azure に登録されているアプリのアプリケーション(クライアント)ID。この値は UUID にする必要があります。詳細については、Azure アプリ登録ページをご覧ください。

    • テナント ID: Pub/Sub に取り込む Azure Event Hub を所有するテナントのディレクトリ(テナント)ID。この値は UUID にする必要があります。テナント ID を確認するには、Azure サブスクリプション ID とテナント ID を取得するをご覧ください。

    • サブスクリプション ID: Azure Event Hubs リソース グループを所有するサブスクリプションのサブスクリプション ID。この値は UUID にする必要があります。サブスクリプション ID を確認するには、Azure サブスクリプション ID とテナント ID を取得するをご覧ください。

    • サービス アカウント: Google Cloudでサービス アカウントを作成するで作成したサービス アカウント。

  8. 残りのフィールドはデフォルト値のままにします。

  9. [トピックを作成] をクリックします。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. gcloud pubsub topics create コマンドを実行します。

    gcloud pubsub topics create TOPIC_ID \
      --azure-event-hubs-ingestion-resource-group RESOURCE_GROUP \
      --azure-event-hubs-ingestion-namespace NAMESPACE \
      --azure-event-hubs-ingestion-event-hub EVENT_HUB \
      --azure-event-hubs-ingestion-client-id CLIENT_ID \
      --azure-event-hubs-ingestion-tenant-id TENANT_ID \
      --azure-event-hubs-ingestion-subscription-id SUBSCRIPTION_ID \
      --azure-event-hubs-ingestion-service-account SERVICE_ACCOUNT

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

  • TOPIC_ID: Pub/Sub トピックの名前または ID。
  • RESOURCE_GROUP: Pub/Sub に取り込む予定の Azure Event Hubs 名前空間を含む Azure Event Hubs リソース グループの名前。
  • NAMESPACE: Pub/Sub に取り込む Azure Event Hub を含む Azure Event Hubs Namespace の名前。
  • EVENT_HUB: Pub/Sub に取り込む予定の Azure Event Hub の名前。
  • CLIENT_ID: Azure に登録されているアプリのアプリケーション(クライアント)ID。Google Cloud サービス アカウントの連携 ID が含まれています。この値は UUID にする必要があります。詳細については、Azure アプリ登録ページをご覧ください。
  • TENANT_ID: Pub/Sub に取り込む Azure Event Hub を所有するテナントのディレクトリ(テナント)ID。この値は UUID にする必要があります。テナント ID を確認するには、Azure イベントの Azure サブスクリプション ID とテナント ID を取得するをご覧ください。
  • SUBSCRIPTION_ID: Pub/Sub に取り込む Azure Event Hub を所有するサブスクリプションのサブスクリプション ID。この値は UUID にする必要があります。サブスクリプション ID を確認するには、Azure サブスクリプション ID とテナント ID を取得するをご覧ください。
  • SERVICE_ACCOUNT: Google Cloud でサービス アカウントを作成する Google Cloudで作成したサービス アカウント

Go

このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Go 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。

Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsub"
)

func createTopicWithAzureEventHubsIngestion(w io.Writer, projectID, topicID, resourceGroup, namespace, eventHub, clientID, tenantID, subID, gcpSA string) error {
	// projectID := "my-project-id"
	// topicID := "my-topic"

	// // Azure Event Hubs ingestion settings.
	// resourceGroup := "resource-group"
	// namespace := "namespace"
	// eventHub := "event-hub"
	// clientID := "client-id"
	// tenantID := "tenant-id"
	// subID := "subscription-id"
	// gcpSA := "gcp-service-account"

	ctx := context.Background()
	client, err := pubsub.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %w", err)
	}
	defer client.Close()

	cfg := &pubsub.TopicConfig{
		IngestionDataSourceSettings: &pubsub.IngestionDataSourceSettings{
			Source: &pubsub.IngestionDataSourceAzureEventHubs{
				ResourceGroup:     resourceGroup,
				Namespace:         namespace,
				EventHub:          eventHub,
				ClientID:          clientID,
				TenantID:          tenantID,
				SubscriptionID:    subID,
				GCPServiceAccount: gcpSA,
			},
		},
	}
	t, err := client.CreateTopicWithConfig(ctx, topicID, cfg)
	if err != nil {
		return fmt.Errorf("CreateTopic: %w", err)
	}
	fmt.Fprintf(w, "Created topic with azure event hubs ingestion: %v\n", t)
	return nil
}

Java

このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Java 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。

Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


import com.google.cloud.pubsub.v1.TopicAdminClient;
import com.google.pubsub.v1.IngestionDataSourceSettings;
import com.google.pubsub.v1.Topic;
import com.google.pubsub.v1.TopicName;
import java.io.IOException;

public class CreateTopicWithAzureEventHubsIngestionExample {
  public static void main(String... args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String topicId = "your-topic-id";
    // Azure Event Hubs ingestion settings.
    String resourceGroup = "resource-group";
    String namespace = "namespace";
    String eventHub = "event-hub";
    String clientId = "client-id";
    String tenantId = "tenant-id";
    String subscriptionId = "subscription-id";
    String gcpServiceAccount = "gcp-service-account";

    createTopicWithAzureEventHubsIngestionExample(
        projectId,
        topicId,
        resourceGroup,
        namespace,
        eventHub,
        clientId,
        tenantId,
        subscriptionId,
        gcpServiceAccount);
  }

  public static void createTopicWithAzureEventHubsIngestionExample(
      String projectId,
      String topicId,
      String resourceGroup,
      String namespace,
      String eventHub,
      String clientId,
      String tenantId,
      String subscriptionId,
      String gcpServiceAccount)
      throws IOException {
    try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
      TopicName topicName = TopicName.of(projectId, topicId);

      IngestionDataSourceSettings.AzureEventHubs azureEventHubs =
          IngestionDataSourceSettings.AzureEventHubs.newBuilder()
              .setResourceGroup(resourceGroup)
              .setNamespace(namespace)
              .setEventHub(eventHub)
              .setClientId(clientId)
              .setTenantId(tenantId)
              .setSubscriptionId(subscriptionId)
              .setGcpServiceAccount(gcpServiceAccount)
              .build();
      IngestionDataSourceSettings ingestionDataSourceSettings =
          IngestionDataSourceSettings.newBuilder().setAzureEventHubs(azureEventHubs).build();

      Topic topic =
          topicAdminClient.createTopic(
              Topic.newBuilder()
                  .setName(topicName.toString())
                  .setIngestionDataSourceSettings(ingestionDataSourceSettings)
                  .build());

      System.out.println(
          "Created topic with Azure Event Hubs ingestion settings: " + topic.getAllFields());
    }
  }
}

Node.js

このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Node.js 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。

Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const resourceGroup = 'YOUR_RESOURCE_GROUP';
// const namespace = 'YOUR_NAMESPACE';
// const eventHub = 'YOUR_EVENT_HUB';
// const clientId = 'YOUR_CLIENT_ID';
// const tenantId = 'YOUR_TENANT_ID';
// const subscriptionId = 'YOUR_SUBSCRIPTION_ID';
// const gcpServiceAccount = 'ingestion-account@...';

// Imports the Google Cloud client library
const {PubSub} = require('@google-cloud/pubsub');

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function createTopicWithAzureEventHubsIngestion(
  topicNameOrId,
  resourceGroup,
  namespace,
  eventHub,
  clientId,
  tenantId,
  subscriptionId,
  gcpServiceAccount
) {
  // Creates a new topic with Azure Event Hubs ingestion.
  await pubSubClient.createTopic({
    name: topicNameOrId,
    ingestionDataSourceSettings: {
      azureEventHubs: {
        resourceGroup,
        namespace,
        eventHub,
        clientId,
        tenantId,
        subscriptionId,
        gcpServiceAccount,
      },
    },
  });
  console.log(
    `Topic ${topicNameOrId} created with Azure Event Hubs ingestion.`
  );
}

Python

このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Python 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。

Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

from google.cloud import pubsub_v1
from google.pubsub_v1.types import Topic
from google.pubsub_v1.types import IngestionDataSourceSettings

# TODO(developer)
# project_id = "your-project-id"
# topic_id = "your-topic-id"
# resource_group = "your-resource-group"
# namespace = "your-namespace"
# event_hub = "your-event-hub"
# client_id = "your-client-id"
# tenant_id = "your-tenant-id"
# subscription_id = "your-subscription-id"
# gcp_service_account = "your-gcp-service-account"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_id)

request = Topic(
    name=topic_path,
    ingestion_data_source_settings=IngestionDataSourceSettings(
        azure_event_hubs=IngestionDataSourceSettings.AzureEventHubs(
            resource_group=resource_group,
            namespace=namespace,
            event_hub=event_hub,
            client_id=client_id,
            tenant_id=tenant_id,
            subscription_id=subscription_id,
            gcp_service_account=gcp_service_account,
        )
    ),
)

topic = publisher.create_topic(request=request)

print(f"Created topic: {topic.name} with Azure Event Hubs Ingestion Settings")

C++

このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある C++ 向けの手順に従って設定を行ってください。 詳細については、Pub/Sub C++ API のリファレンス ドキュメントをご覧ください。

Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

namespace pubsub = ::google::cloud::pubsub;
namespace pubsub_admin = ::google::cloud::pubsub_admin;
[](pubsub_admin::TopicAdminClient client, std::string project_id,
   std::string topic_id, std::string const& resource_group,
   std::string const& event_hubs_namespace, std::string const& event_hub,
   std::string const& client_id, std::string const& tenant_id,
   std::string const& subscription_id,
   std::string const& gcp_service_account) {
  google::pubsub::v1::Topic request;
  request.set_name(
      pubsub::Topic(std::move(project_id), std::move(topic_id)).FullName());
  auto* azure_event_hubs = request.mutable_ingestion_data_source_settings()
                               ->mutable_azure_event_hubs();
  azure_event_hubs->set_resource_group(resource_group);
  azure_event_hubs->set_namespace_(event_hubs_namespace);
  azure_event_hubs->set_event_hub(event_hub);
  azure_event_hubs->set_client_id(client_id);
  azure_event_hubs->set_tenant_id(tenant_id);
  azure_event_hubs->set_subscription_id(subscription_id);
  azure_event_hubs->set_gcp_service_account(gcp_service_account);

  auto topic = client.CreateTopic(request);
  // Note that kAlreadyExists is a possible error when the library retries.
  if (topic.status().code() == google::cloud::StatusCode::kAlreadyExists) {
    std::cout << "The topic already exists\n";
    return;
  }
  if (!topic) throw std::move(topic).status();

  std::cout << "The topic was successfully created: " << topic->DebugString()
            << "\n";
}

Node.js (TypeScript)

このサンプルを試す前に、Pub/Sub クイックスタート: クライアント ライブラリの使用にある Node.js 向けの手順に沿って設定を行ってください。 詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。

Pub/Sub に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
// const resourceGroup = 'YOUR_RESOURCE_GROUP';
// const namespace = 'YOUR_NAMESPACE';
// const eventHub = 'YOUR_EVENT_HUB';
// const clientId = 'YOUR_CLIENT_ID';
// const tenantId = 'YOUR_TENANT_ID';
// const subscriptionId = 'YOUR_SUBSCRIPTION_ID';
// const gcpServiceAccount = 'ingestion-account@...';

// Imports the Google Cloud client library
import {PubSub} from '@google-cloud/pubsub';

// Creates a client; cache this for further use
const pubSubClient = new PubSub();

async function createTopicWithAzureEventHubsIngestion(
  topicNameOrId: string,
  resourceGroup: string,
  namespace: string,
  eventHub: string,
  clientId: string,
  tenantId: string,
  subscriptionId: string,
  gcpServiceAccount: string
) {
  // Creates a new topic with Azure Event Hubs ingestion.
  await pubSubClient.createTopic({
    name: topicNameOrId,
    ingestionDataSourceSettings: {
      azureEventHubs: {
        resourceGroup,
        namespace,
        eventHub,
        clientId,
        tenantId,
        subscriptionId,
        gcpServiceAccount,
      },
    },
  });
  console.log(
    `Topic ${topicNameOrId} created with Azure Event Hubs ingestion.`
  );
}

問題が発生した場合は、Azure Event Hubs インポート トピックのトラブルシューティングをご覧ください。

Azure Event Hubs インポート トピックを編集する

Azure Event Hubs インポート トピックの取り込みデータソースの設定を編集する手順は次のとおりです。

Console

  1. Google Cloud コンソールの トピック ページに移動します。

    [トピック] に移動

  2. Azure Event Hubs インポート トピックをクリックします。

  3. [トピックの詳細] ページで、[編集] をクリックします。

  4. 変更するフィールドを更新します。

  5. [更新] をクリックします。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 次のサンプルに記載されているフラグをすべて指定して、gcloud pubsub topics update コマンドを実行します。

    gcloud pubsub topics update TOPIC_ID \
        --azure-event-hubs-ingestion-resource-group RESOURCE_GROUP \
        --azure-event-hubs-ingestion-namespace NAMESPACE \
        --azure-event-hubs-ingestion-event-hub EVENT_HUB \
        --azure-event-hubs-ingestion-client-id CLIENT_ID \
        --azure-event-hubs-ingestion-tenant-id TENANT_ID \
        --azure-event-hubs-ingestion-subscription-id SUBSCRIPTION_ID \
        --azure-event-hubs-ingestion-service-account SERVICE_ACCOUNT

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

    • TOPIC_ID: Pub/Sub トピックの名前または ID。
    • RESOURCE_GROUP: Pub/Sub に取り込む Azure Event Hubs Namespace を含む Azure Event Hubs リソース グループの名前。
    • NAMESPACE: Pub/Sub に取り込む Azure Event Hub を含む Azure Event Hubs 名前空間の名前。
    • EVENT_HUB: Pub/Sub に取り込む Azure Event Hub の名前。
    • CLIENT_ID: Azure に登録されているアプリのアプリケーション(クライアント)ID。Google Cloud サービス アカウントの連携 ID が含まれています。この値は UUID にする必要があります。詳細については、Azure アプリ登録ページをご覧ください。
    • TENANT_ID: Pub/Sub に取り込む Azure Event Hubs を所有するテナントのディレクトリ(テナント)ID。この値は UUID にする必要があります。テナント ID を確認するには、Azure の「サブスクリプション ID とテナント ID を取得する」ページをご覧ください。
    • SUBSCRIPTION_ID: Pub/Sub に取り込む Azure Event Hub を所有するサブスクリプションのサブスクリプション ID。この値は UUID にする必要があります。サブスクリプション ID を確認する方法については、Azure サブスクリプション ID とテナント ID を取得するをご覧ください。
    • SERVICE_ACCOUNT: Google Cloudでサービス アカウントを作成するで作成したサービス アカウント

割り当てと上限

インポート トピックのパブリッシャーのスループットは、トピックのパブリッシュ割り当てによってバインドされます。詳細については、Pub/Sub の割り当てと上限をご覧ください。

次のステップ