创建 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.serviceAgent
  • 更新导入主题: 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. 搜索并点击 服务账号令牌创建者角色 (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 导入主题。

向 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 服务代理角色 (roles/pubsub.serviceAgent)。

  7. 点击保存

允许发布所有主题的内容

如果您尚未创建任何 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. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  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. 搜索并点击 服务账号用户角色 (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. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  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 获取订阅和租户 ID 页面
    • SUBSCRIPTION_ID:您计划注入到 Pub/Sub 中的 Azure 事件中心的订阅所对应的订阅 ID。此值应为 UUID。如需查找您的订阅 ID,请访问 Azure 获取订阅和租户 ID 页面
    • SERVICE_ACCOUNT:您在在 Google Cloud中创建服务账号中创建的服务账号

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)。如果您仍在使用 v1 库,请参阅迁移到 v2 的指南。如需查看 v1 代码示例的列表,请参阅 已弃用的代码示例

在尝试此示例之前,请按照《快速入门:使用客户端库》中的 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 事件中心导入主题

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

控制台

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

    打开“主题”

  2. 点击 Azure 事件中心导入主题。

  3. 在主题详情页面中,点击修改

  4. 更新您要更改的字段。

  5. 点击更新

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  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:您要提取到 Pub/Sub 中的 Azure 事件中心的名称。
    • 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 配额和限制

后续步骤