建立 Azure 事件中樞匯入主題

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

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

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

事前準備

必要角色和權限

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

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

所需權限

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

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

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

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

設定同盟身分,以便存取 Azure Event Hubs

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

在 Google Cloud中建立服務帳戶

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

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

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

記下服務帳戶專屬 ID

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

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

    前往服務帳戶

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

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

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

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

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

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

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

  1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。

    前往「IAM」(身分與存取權管理) 頁面

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

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

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

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

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

  7. 按一下 [儲存]

使用身分同盟建立應用程式註冊

如要從 Azure Event Hubs 擷取資料,請向 Microsoft Identity Platform 註冊應用程式,並為服務帳戶啟用身分聯盟。這樣一來,服務帳戶就能向 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」(身分與存取權管理) 頁面。

    前往「IAM」(身分與存取權管理) 頁面

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

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

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

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

  6. 搜尋並點選「Pub/Sub Service Agent」角色 (roles/pubsub.serviceAgent)

  7. 按一下 [儲存]

允許從所有主題發布內容

如果您尚未建立任何 Azure Event Hubs 匯入主題,請使用這個方法。

  1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。

    前往「IAM」(身分與存取權管理) 頁面

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

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

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

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

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

  7. 按一下 [儲存]

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

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

  1. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

  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) 包含 iam.serviceAccounts.actAs 權限,可讓主體將服務帳戶附加至 Azure Event Hubs 匯入主題的擷取設定,並將該服務帳戶用於聯合身分。

  1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。

    前往「IAM」(身分與存取權管理) 頁面

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

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

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

  5. 按一下 [儲存]

使用 Azure Event Hubs 匯入主題

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

注意事項

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

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

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

建立 Azure Event Hubs 匯入主題

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

請確認已完成下列程序:

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

控制台

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

    前往「主題」

  2. 按一下「建立主題」

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

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

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

  6. 選取「Azure Event Hubs」做為擷取來源。

  7. 輸入下列詳細資訊:

    • 資源群組:Azure 資源群組的名稱,其中包含您打算擷取至 Pub/Sub 的 Azure Event Hubs 命名空間。
    • Event Hub 命名空間:Azure Event Hubs 命名空間的名稱,其中包含您打算擷取至 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. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

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

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/v2"
	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
)

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

	topicpb := &pubsubpb.Topic{
		Name: fmt.Sprintf("projects/%s/topics/%s", projectID, topicID),
		IngestionDataSourceSettings: &pubsubpb.IngestionDataSourceSettings{
			Source: &pubsubpb.IngestionDataSourceSettings_AzureEventHubs_{
				AzureEventHubs: &pubsubpb.IngestionDataSourceSettings_AzureEventHubs{
					ResourceGroup:     resourceGroup,
					Namespace:         namespace,
					EventHub:          eventHub,
					ClientId:          clientID,
					TenantId:          tenantID,
					SubscriptionId:    subID,
					GcpServiceAccount: gcpSA,
				},
			},
		},
	}
	topic, err := client.TopicAdminClient.CreateTopic(ctx, topicpb)
	if err != nil {
		return fmt.Errorf("CreateTopic: %w", err)
	}
	fmt.Fprintf(w, "Created topic with Azure Event Hubs ingestion: %v\n", topic)
	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 Event Hubs 匯入主題

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

控制台

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

    前往「主題」

  2. 按一下 Azure Event Hubs 匯入主題。

  3. 在主題詳細資料頁面中,按一下「編輯」

  4. 更新要變更的欄位。

  5. 按一下「Update」

gcloud

  1. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

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

配額與限制

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

後續步驟