创建 Azure Event Hubs 导入主题

借助 Azure 事件中心导入主题,您可以持续从 Azure 事件中心(作为外部来源)将数据注入 Pub/Sub。然后,您可以将数据流式传输到 Pub/Sub 支持的任何目标位置。

本文档介绍了如何创建和管理 Azure 事件中心导入主题。如需创建标准主题,请参阅创建标准主题

如需详细了解导入主题,请参阅关于导入主题

准备工作

所需的角色和权限

如需获得创建和管理 Azure Event Hubs 导入主题所需的权限,请让您的管理员为您授予主题或项目的 Pub/Sub Editor (roles/pubsub.editor) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建和管理 Azure Event Hubs 导入主题所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建和管理 Azure 事件中心导入主题,需要具备以下权限:

  • 创建导入主题: 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 事件中心

借助工作负载身份联合, Google Cloud 服务可以访问在 Google Cloud外部运行的工作负载。借助身份联合,您无需维护凭据或将凭据传递给 Google Cloud ,即可访问其他云中的资源。您可以改为使用工作负载本身的身份向 Google Cloud 进行身份验证并访问资源。

在 Google Cloud中创建服务账号

这是一个可选步骤。 如果您已有服务账号,则可以在此过程中使用该账号,而不必创建新的服务账号。 如果您使用的是现有服务账号,请前往记录服务账号的唯一 ID 以进行下一步。

对于 Azure 事件中心导入主题,Pub/Sub 使用服务账号作为身份来访问 Azure 中的资源。

如需详细了解如何创建服务账号,包括前提条件、所需角色和权限以及命名指南,请参阅创建服务账号。创建服务账号后,您可能需要等待 60 秒或更长时间才能使用该服务账号。出现这种行为的原因是读取操作是最终一致的;新服务账号可能需要一段时间才能显示。

记录服务账号唯一 ID

您需要服务账号唯一 ID 才能在 Azure 中设置应用注册。

  1. 在 Google Cloud 控制台中,前往服务账号详情页面。

    前往服务账号

  2. 点击您刚刚创建的服务账号或计划使用的服务账号。

  3. 服务账号详情页面中,记录唯一 ID 编号。

    您需要在工作流中使用此 ID 来设置 Azure 中的应用注册

向 Pub/Sub 服务账号添加服务账号令牌创建者角色

借助 Service Account Token Creator 角色 (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. 搜索并点击 Service account token creator 角色 (roles/iam.serviceAccountTokenCreator)。

  7. 点击保存

创建具有身份联合的应用注册

如需从 Azure Event Hubs 中注入数据,请向 Microsoft Identity Platform 注册应用,并为您的服务账号启用身份联合。这样,您的服务账号就可以向 Azure 进行身份验证。

如需详细了解如何向 Microsoft Identity Platform 注册应用,请参阅 Azure 应用注册快速入门

  1. 登录 Azure 门户,然后打开 Microsoft Entra ID 页面。

  2. 在导航窗格中,依次点击管理 > 应用注册

  3. 点击 New registration(新注册)。

  4. 为应用命名,并将支持的账号类型设置为除仅限个人 Microsoft 账号之外的任何值。

  5. 如需注册应用,请点击注册

  6. 打开应用,然后依次点击管理 > 证书和密钥

  7. 点击添加凭据

  8. 如需配置联合凭据,请点击其他颁发者

  9. 颁发者字段中,输入 https://accounts.google.com

  10. 对于字段,请输入 Pub/Sub 服务账号的唯一 ID。

    您可以在记录服务账号的唯一 ID 中找到此 ID。

  11. 为联合身份命名,然后点击添加

向已注册的应用授予角色分配

如需让 Pub/Sub 从您的 Azure 事件中心读取数据,请向已注册的应用授予必要的角色。

  1. 登录 Azure 门户,然后打开您的事件中心命名空间。

    如需打开命名空间,请在搜索框中输入事件中心,然后点击其中一个命名空间。

  2. 在边栏中,点击访问权限控制 (IAM)

  3. 依次点击添加 > 添加角色分配

  4. 选择 Azure Event Hubs Data Receiver 角色,然后点击下一步

    这会向 Pub/Sub 服务账号授予对 Azure 事件中心的读取权限。

  5. 点击 + 选择成员,然后搜索您注册的应用。

  6. 在搜索字段中输入已注册的应用名称。

  7. 点击应用的名称,然后点击选择

  8. 点击检查 + 分配

  9. 重复第 3 步至第 6 步,并添加 Azure Event Hubs Data Sender 角色。

    此角色授予 Google Cloud 服务账号从 Azure 事件中心提取元数据的权限。

如需详细了解如何分配 Azure 角色,请访问分配 Azure 角色页面。

向 Pub/Sub 主账号添加 Pub/Sub 发布者角色

如需启用发布功能,您必须为 Pub/Sub 服务账号分配发布者角色,以便 Pub/Sub 能够发布到 Azure Event Hubs 导入主题。

允许发布所有主题的内容

如果您尚未创建任何 Azure 事件中心导入主题,请使用此方法。

  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. 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:项目编号。如需查看项目编号,请参阅标识项目

向服务账号添加服务账号用户角色

Service Account User 角色 (roles/iam.serviceAccountUser) 包含 iam.serviceAccounts.actAs 权限,该权限允许主账号将服务账号附加到 Azure Event Hubs 导入主题的提取设置,并使用该服务账号进行联合身份验证。

  1. 在 Google Cloud 控制台中,前往 IAM 页面。

    转到 IAM

  2. 对于发出创建或更新主题调用请求的主账号,请点击修改主账号按钮。

  3. 如果需要,请点击添加其他角色

  4. 搜索并点击 Service account user 角色 (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. 输入以下详细信息:

    • 资源组:包含您计划注入到 Pub/Sub 中的 Azure 事件中心命名空间的 Azure 资源组的名称。

    • 事件中心命名空间:包含您计划注入到 Pub/Sub 中的 Azure 事件中心的 Azure 事件中心命名空间的名称。

    • 事件中心:您计划注入到 Pub/Sub 中的 Azure 事件中心的名称。

    • 客户端 ID:Azure 中已注册应用的应用程序(客户端)ID,其中包含 Google Cloud 服务账号的联合身份。此值应为 UUID。如需了解详情,请访问 Azure 应用注册页面

    • 租户 ID:您计划注入到 Pub/Sub 中的 Azure 事件中心所属的租户的目录(租户)ID。此值应为 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:包含您计划注入到 Pub/Sub 中的 Azure 事件中心命名空间的 Azure 事件中心资源组的名称。
  • NAMESPACE:包含您计划注入到 Pub/Sub 中的 Azure 事件中心的 Azure 事件中心命名空间的名称。
  • EVENT_HUB:您计划将数据注入到 Pub/Sub 中的 Azure 事件中心的名称。
  • CLIENT_ID:在 Azure 中注册的应用(客户端)ID,其中包含Google Cloud 服务账号的联合身份。此值应为 UUID。如需了解详情,请访问 Azure 应用注册页面
  • TENANT_ID:您计划注入到 Pub/Sub 中的 Azure 事件中心的租户的目录(租户)ID。此值应为 UUID。 如需查找您的租户 ID,请访问 Azure 事件的 Azure 获取订阅和租户 ID 页面
  • SUBSCRIPTION_ID:您计划将 Azure 事件中心中的数据注入到 Pub/Sub 中的订阅所对应的订阅 ID。此值应为 UUID。如需查找您的订阅 ID,请访问 Azure 获取订阅和租户 ID 页面
  • SERVICE_ACCOUNT:您在在 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 事件中心导入主题方面的问题

修改 Azure 事件中心导入主题

如需修改 Azure Event Hubs 导入主题的提取数据源设置,请按以下步骤操作:

控制台

  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:包含您要将数据提取到 Pub/Sub 中的 Azure 事件中心命名空间的 Azure 事件中心资源组的名称。
    • NAMESPACE:包含您要提取到 Pub/Sub 中的 Azure 事件中心的 Azure 事件中心命名空间的名称。
    • EVENT_HUB:您要将数据从哪个 Azure 事件中心提取到 Pub/Sub 中。
    • CLIENT_ID:在 Azure 中注册的应用(客户端)ID,其中包含Google Cloud 服务账号的联合身份。此值应为 UUID。 如需了解详情,请参阅 Azure 应用注册页面
    • TENANT_ID:您要将 Azure 事件中心的数据提取到 Pub/Sub 中的租户的目录(租户)ID。此值应为 UUID。如需查找租户 ID,请访问 Azure“获取订阅和租户 ID”页面
    • SUBSCRIPTION_ID:您要将数据从 Azure 事件中心提取到 Pub/Sub 中的订阅所对应的订阅 ID。此值应为 UUID。如需查找您的订阅 ID,请参阅 Azure 获取订阅和租户 ID
    • SERVICE_ACCOUNT:您在在 Google Cloud中创建服务账号中创建的服务账号

配额和限制

导入主题的发布者吞吐量受主题的发布配额限制。如需了解详情,请参阅 Pub/Sub 配额和限制

后续步骤