建立 Azure 事件中樞匯入主題

Azure 事件中樞匯入主題可讓您從 Azure 事件中樞持續擷取資料,做為外部來源並匯入 Pub/Sub。接著,您可以將資料串流至 Pub/Sub 支援的任何目的地。

本文說明如何建立及管理 Azure 事件中樞匯入主題。如要建立標準主題,請參閱「建立標準主題」一文。

如要進一步瞭解匯入主題,請參閱「關於匯入主題」。

事前準備

必要角色和權限

如要取得建立及管理 Azure Event Hubs 匯入主題所需的權限,請要求管理員為您授予主題或專案的 Pub/Sub 編輯者 (roles/pubsub.editor) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備建立及管理 Azure 事件中樞匯入主題所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要建立及管理 Azure 事件中樞匯入主題,您必須具備下列權限:

  • 建立匯入主題: pubsub.topics.create
  • 刪除匯入主題: pubsub.topics.delete
  • 取得匯入主題: pubsub.topics.get
  • 列出匯入主題: pubsub.topics.list
  • 發布至匯入主題: pubsub.topics.publish and pubsub.serviceAgent
  • 更新匯入主題: pubsub.topics.update
  • 取得匯入主題的身分與存取權管理政策: pubsub.topics.getIamPolicy
  • 設定匯入主題的 IAM 政策 pubsub.topics.setIamPolicy

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

您可以在專案層級和個別資源層級設定存取權控管。

設定同盟身分,以便存取 Azure 事件中樞

Workload Identity 聯盟可讓 Google Cloud 服務存取 Google Cloud外部執行的工作負載。使用身分聯盟時,您不需要維護或傳遞憑證,即可存取其他雲端中的資源。 Google Cloud 您可以改用工作負載本身的 ID 向 Google Cloud 進行驗證,並存取資源。

在 Google Cloud中建立服務帳戶

這個步驟可以省略。如果您已有服務帳戶,可以在這個程序中使用該帳戶,不必建立新的服務帳戶。如果您使用現有的服務帳戶,請前往「記錄服務帳戶的專屬 ID」進行下一個步驟。

對於 Azure 事件中樞匯入主題,Pub/Sub 會使用服務帳戶做為身分,從 Azure 存取資源。

如要進一步瞭解如何建立服務帳戶,包括必要條件、必要角色和權限,以及命名規範,請參閱「建立服務帳戶」。建立服務帳戶後,您可能需要等待 60 秒以上,才能使用該服務帳戶。這種行為的發生,是因為讀取作業最終會保持一致性,因此需要一段時間,新服務帳戶才會顯示。

記下服務帳戶專屬 ID

您需要服務帳戶專屬 ID,才能在 Azure 中設定應用程式註冊。

  1. 前往 Google Cloud 控制台的「Service account」(服務帳戶) 詳細資料頁面。

    前往服務帳戶

  2. 按一下您剛建立的服務帳戶,或打算使用的服務帳戶。

  3. 在「服務帳戶詳細資料」頁面中,記下專屬 ID 編號。

    您需要這個 ID,才能在工作流程中設定 Azure 的應用程式註冊

為 Pub/Sub 服務帳戶新增服務帳戶憑證建立者角色

服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator) 可讓主體為服務帳戶建立短期憑證。這些權杖或憑證可用於模擬服務帳戶。

如要進一步瞭解服務帳戶模擬功能,請參閱服務帳戶模擬功能

您也可以在這個程序中新增 Pub/Sub 發布者角色 (roles/pubsub.publisher)。如要進一步瞭解角色和新增原因,請參閱「將 Pub/Sub 發布者角色新增至 Pub/Sub 服務帳戶」。

  1. 前往 Google Cloud 控制台的「IAM」頁面。

    前往身分與存取權管理頁面

  2. 按一下「包含 Google提供的角色授予項目」核取方塊。

  3. 找出格式為 service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com 的服務帳戶。

  4. 按一下這個服務帳戶的「編輯主體」按鈕。

  5. 視需要按一下「新增其他角色」

  6. 搜尋並點選「服務帳戶憑證建立者角色」 (roles/iam.serviceAccountTokenCreator)。

  7. 按一下 [儲存]

使用 Identity 聯盟建立應用程式註冊

如要從 Azure 事件中樞擷取資料,請向 Microsoft Identity 平台註冊應用程式,並為服務帳戶啟用身分聯盟。這樣一來,服務帳戶就能向 Azure 進行驗證。

如要進一步瞭解如何透過 Microsoft Identity Platform 註冊應用程式,請參閱 Azure 應用程式註冊快速入門

  1. 登入 Azure 入口網站,然後開啟「Microsoft Entra ID」頁面。

  2. 在導覽窗格中,依序按一下「管理」 >「應用程式註冊」

  3. 按一下 [新增註冊]

  4. 為應用程式命名,並將「支援的帳戶類型」設為「僅限個人 Microsoft 帳戶」以外的任何選項。

  5. 如要註冊應用程式,請按一下「Register」

  6. 開啟應用程式,然後依序點選「管理」>「憑證和密鑰」

  7. 按一下「新增憑證」

  8. 如要設定同盟憑證,請按一下「其他簽發者」

  9. 在「Issuer」欄位中輸入 https://accounts.google.com

  10. 在「值」欄位中,輸入 Pub/Sub 服務帳戶的專屬 ID。

    您可以在「記錄服務帳戶專屬 ID」中找到這個 ID。

  11. 為同盟身分命名,然後按一下「新增」

將角色指派給已註冊的應用程式

如要讓 Pub/Sub 從 Azure 事件中樞讀取資料,請將必要角色授予已註冊的應用程式。

  1. 登入 Azure 入口網站,然後開啟 Event Hubs 命名空間。

    如要開啟命名空間,請在搜尋中輸入「Event Hubs」,然後按一下其中一個命名空間。

  2. 按一下側欄中的「存取權控管 (IAM)」

  3. 依序點選「新增」>「新增角色指派」。

  4. 選取「Azure Event Hubs Data Receiver」角色,然後按一下「Next」

    這會授予 Pub/Sub 服務帳戶 Azure 事件中樞的讀取權限。

  5. 按一下「+ 選取成員」,然後搜尋已註冊的應用程式。

  6. 在搜尋欄位中輸入已註冊的應用程式名稱。

  7. 按一下應用程式名稱,然後點選「選取」

  8. 按一下「Review + Assign」

  9. 重複步驟 3 至 6,並新增「Azure Event Hubs Data Sender」角色。

    這個角色會授予 Google Cloud 服務帳戶權限,從 Azure 事件中樞擷取中繼資料。

如要進一步瞭解如何指派 Azure 角色,請參閱「指派 Azure 角色」頁面。

將 Pub/Sub 發布者角色新增至 Pub/Sub 主體

如要啟用發布功能,您必須將發布者角色指派給 Pub/Sub 服務帳戶,這樣 Pub/Sub 才能發布至 Azure Event Hubs 匯入主題。

為 Pub/Sub 服務帳戶新增 Pub/Sub 服務代理人角色

如要允許 Pub/Sub 使用匯入主題專案的發布配額,Pub/Sub 服務代理需要匯入主題專案的 serviceusage.services.use 權限。

如要提供這項權限,建議您將 Pub/Sub 服務代理人角色新增至 Pub/Sub 服務帳戶。

如果 Pub/Sub 服務帳戶沒有 Pub/Sub 服務代理人角色,可以按照下列步驟授予:

  1. 前往 Google Cloud 控制台的「IAM」頁面。

    前往身分與存取權管理頁面

  2. 按一下「包含 Google提供的角色授予項目」核取方塊。

  3. 找出格式為 service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com 的服務帳戶。

  4. 按一下這個服務帳戶的「編輯主體」按鈕。

  5. 視需要按一下「新增其他角色」

  6. 搜尋並點選「Pub/Sub Service Agent role」(Pub/Sub 服務代理角色) (roles/pubsub.serviceAgent)。

  7. 按一下 [儲存]

允許從所有主題發布內容

如果您尚未建立任何 Azure 事件中樞匯入主題,請使用這個方法。

  1. 前往 Google Cloud 控制台的「IAM」頁面。

    前往身分與存取權管理頁面

  2. 按一下「包含 Google提供的角色授予項目」核取方塊。

  3. 找出格式為 service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com 的服務帳戶。

  4. 按一下這個服務帳戶的「編輯主體」按鈕。

  5. 視需要按一下「新增其他角色」

  6. 搜尋並按一下 Pub/Sub 發布者角色 (roles/pubsub.publisher)。

  7. 按一下 [儲存]

啟用從單一主題發布的功能

只有在 Azure 事件中樞匯入主題已存在時,才使用這個方法。

  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 事件中樞匯入主題的主題 ID。

    • PROJECT_NUMBER:專案編號。如要查看專案編號,請參閱「識別專案」。

  3. 將服務帳戶使用者角色新增至服務帳戶

    服務帳戶使用者角色 (roles/iam.serviceAccountUser) 包含 iam.serviceAccounts.actAs 權限,可讓主體將服務帳戶附加至 Azure Event Hubs 匯入主題的擷取設定,並將該服務帳戶用於同盟身分。

    1. 前往 Google Cloud 控制台的「IAM」頁面。

      前往身分與存取權管理頁面

    2. 針對發出建立或更新主題呼叫的主體,按一下「編輯主體」按鈕。

    3. 視需要按一下「新增其他角色」

    4. 搜尋並按一下「服務帳戶使用者角色」(roles/iam.serviceAccountUser)。

    5. 按一下 [儲存]

    使用 Azure 事件中樞匯入主題

    您可以建立新的匯入主題,或編輯現有主題。

    注意事項

    • 即使快速連續建立主題和訂閱項目,也可能導致資料遺失。在免付費期間,主題會短暫存在。如果在這段時間內有任何資料傳送至主題,這些資料都會遺失。先建立主題,然後建立訂閱項目,再將主題轉換為匯入主題,即可確保匯入程序不會遺漏任何訊息。

    • 如要重新建立現有匯入主題的 Azure 事件中樞,且名稱相同,您無法直接刪除並重新建立 Azure 事件中樞。這項操作可能會導致 Pub/Sub 的位移管理失效,進而造成資料遺失。如要解決這個問題,請按照下列步驟操作:

      • 刪除 Pub/Sub 匯入主題
      • 刪除 Azure 事件中樞
      • 建立 Azure 事件中樞
      • 建立 Pub/Sub 匯入主題
    • 系統一律會從最早的位移讀取 Azure 事件中樞的資料。

    建立 Azure 事件中樞匯入主題

    如要進一步瞭解與主題相關聯的屬性,請參閱「主題的屬性」。

    請確認你已完成下列程序:

    如要建立 Azure 事件中樞匯入主題,請按照下列步驟操作:

    控制台

    1. 前往 Google Cloud 控制台的「主題」頁面。

      前往「主題」

    2. 按一下「建立主題」

    3. 在「主題 ID」欄位中,輸入 Azure 事件中樞匯入主題的 ID。如要進一步瞭解如何為主題命名,請參閱命名規範

    4. 選取「新增預設訂閱項目」

    5. 選取「啟用擷取功能」

    6. 選取「Azure 事件中樞」做為擷取來源。

    7. 輸入下列詳細資訊:

      • 資源群組:Azure 資源群組的名稱,其中包含您打算擷取至 Pub/Sub 的 Azure Event Hubs 命名空間。
      • 事件中樞命名空間:Azure 事件中樞命名空間的名稱,其中包含您打算擷取至 Pub/Sub 的 Azure 事件中樞。
      • 事件中樞:您打算擷取至 Pub/Sub 的 Azure 事件中樞名稱。
      • 用戶端 ID:在 Azure 中註冊的應用程式 (用戶端) ID,其中包含 Google Cloud 服務帳戶的同盟身分。這個值應為 UUID。詳情請參閱 Azure 應用程式註冊頁面
      • 用戶群 ID:擁有 Azure 事件中樞的用戶群目錄 (用戶群) ID,您打算將該中樞資料擷取至 Pub/Sub。這個值應為 UUID。如要找出租戶 ID,請前往 Azure 取得訂閱和租戶 ID 頁面
      • 訂閱 ID:擁有 Azure 事件中樞資源群組的訂閱項目 ID。這個值應為 UUID。 如要找出訂閱 ID,請前往 Azure 取得訂閱和租戶 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:Azure 事件中樞資源群組的名稱,其中包含您打算擷取至 Pub/Sub 的 Azure 事件中樞命名空間。
      • NAMESPACE:Azure 事件中樞命名空間的名稱,其中包含您打算擷取至 Pub/Sub 的 Azure 事件中樞。
      • EVENT_HUB:您打算擷取至 Pub/Sub 的 Azure 事件中樞名稱。
      • :Azure 中已註冊的應用程式 (用戶端) ID,其中包含Google Cloud 服務帳戶的聯盟身分。CLIENT_ID這個值應為 UUID。詳情請參閱 Azure 應用程式註冊頁面
      • TENANT_ID:擁有 Azure 事件中樞的租戶目錄 (租戶) ID,您打算將該事件中樞資料擷取至 Pub/Sub。這個值應為 UUID。 如要找出租戶 ID,請前往 Azure 取得訂閱和租戶 ID 頁面
      • SUBSCRIPTION_ID:擁有 Azure 事件中樞的訂閱項目 ID,您打算將該事件中樞資料擷取到 Pub/Sub。這個值應為 UUID。如要找出訂閱 ID,請前往 Azure 取得訂閱和租戶 ID 頁面
      • SERVICE_ACCOUNT:您在「在 Google Cloud中建立服務帳戶」中建立的服務帳戶
    3. C++

      在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 C++ 設定操作說明進行操作。詳情請參閱 Pub/Sub C++ API 參考說明文件

      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";
      }

      Go

      以下範例使用 Go Pub/Sub 用戶端程式庫的主要版本 (v2)。如果您仍在使用第 1 版程式庫,請參閱第 2 版遷移指南。如要查看第 1 版程式碼範例清單,請參閱 已淘汰的程式碼範例

      在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 Pub/Sub Go API 參考說明文件

      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

      在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Java 設定操作說明進行操作。詳情請參閱 Pub/Sub Java API 參考說明文件

      
      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

      在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 Pub/Sub Node.js API 參考說明文件

      /**
       * 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.`,
        );
      }

      Node.ts

      在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 Pub/Sub Node.js API 參考說明文件

      /**
       * 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.`,
        );
      }

      Python

      在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Python 設定操作說明來進行。詳情請參閱 Pub/Sub Python API 參考說明文件

      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")

    如果發生問題,請參閱「排解 Azure 事件中樞匯入主題的問題」。

    編輯 Azure 事件中樞匯入主題

    如要編輯 Azure 事件中樞匯入主題的擷取資料來源設定,請按照下列步驟操作:

    控制台

    1. 前往 Google Cloud 控制台的「主題」頁面。

      前往「主題」

    2. 按一下 Azure 事件中樞匯入主題。

    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:Azure Event Hubs 資源群組的名稱,其中包含要擷取至 Pub/Sub 的 Azure Event Hubs 命名空間。
      • NAMESPACE:Azure Event Hubs 命名空間的名稱,其中包含您要擷取至 Pub/Sub 的 Azure 事件中樞。
      • EVENT_HUB:您要擷取至 Pub/Sub 的 Azure 事件中樞名稱。
      • :Azure 中已註冊的應用程式 (用戶端) ID,其中包含Google Cloud 服務帳戶的聯盟身分。CLIENT_ID這個值應為 UUID。 詳情請參閱 Azure 應用程式註冊頁面
      • TENANT_ID:擁有 Azure 事件中樞的租用戶目錄 (租用戶) ID,您要將該事件中樞資料擷取至 Pub/Sub。這個值應為 UUID。如要找出用戶群 ID,請前往 Azure 取得訂閱和用戶群 ID 頁面
      • SUBSCRIPTION_ID:擁有 Azure 事件中樞的訂閱項目 ID,您要將該事件中樞資料擷取至 Pub/Sub。這個值應為 UUID。如要找出訂閱 ID,請參閱「Azure 取得訂閱和租戶 ID」。
      • SERVICE_ACCOUNT:您在「在 Google Cloud中建立服務帳戶」中建立的服務帳戶

    配額與限制

    匯入主題的發布者輸送量會受限於主題的發布配額。詳情請參閱 Pub/Sub 配額與限制

    後續步驟