借助 Azure Event Hubs 导入主题,您可以将 Azure Event Hubs 作为外部来源,将数据持续提取到 Pub/Sub。然后,您可以将数据流式传输到 Pub/Sub 支持的任何目的地。
本文档介绍了如何创建和管理 Azure Event Hubs 导入主题。如需创建标准主题,请参阅创建标准主题。
如需详细了解导入主题,请参阅导入主题简介。
准备工作
详细了解 Pub/Sub 发布流程。
设置工作负载身份联合,以便Google Cloud 可以访问外部在线播放服务。
所需的角色和权限
如需获得创建和管理 Azure Event Hubs 导入主题所需的权限,请让管理员向您授予主题或项目的 Pub/Sub Editor (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
借助工作负载身份联合, Google Cloud 服务可以访问 Google Cloud外部运行的工作负载。借助身份联合,您无需维护或传递凭据,即可 Google Cloud 访问其他云中的资源。不过,您可以使用工作负载本身的身份进行身份验证 Google Cloud 并访问资源。
在 Google Cloud中创建服务账号
这是一个可选步骤。 如果您已有服务账号,则可以在本过程中使用该账号,而无需创建新的服务账号。如果您使用的是现有服务账号,请参阅记录服务账号唯一 ID 以了解后续步骤。
对于 Azure Event Hubs 导入主题,Pub/Sub 会使用服务账号作为身份来访问 Azure 中的资源。
如需详细了解如何创建服务账号(包括前提条件、所需角色和权限以及命名准则),请参阅创建服务账号。创建服务账号后,您可能需要等待 60 秒或更长时间才能使用该服务账号。出现这种行为的原因是读取操作是最终一致的;新服务账号可能需要一段时间才能显示。
记录服务账号唯一 ID
您需要服务账号唯一 ID 才能在 Azure 中设置应用注册。
在 Google Cloud 控制台中,前往服务账号详情页面。
点击您刚刚创建的服务账号或您打算使用的服务账号。
在服务账号详情页面中,记录唯一 ID 编号。
您需要在工作流程中使用此 ID 来设置在 Azure 中注册应用。
向 Pub/Sub 服务账号添加 Service Account Token Creator 角色
Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator
) 可让主账号为服务账号创建短期有效凭据。这些令牌或凭据用于模拟服务账号。
如需详细了解服务账号模拟,请参阅服务账号模拟。
您还可以在此过程中添加 Pub/Sub Publisher 角色 (roles/pubsub.publisher
)。如需详细了解该角色以及添加该角色的原因,请参阅向 Pub/Sub 服务账号添加 Pub/Sub 发布商角色。
在 Google Cloud 控制台中,转到 IAM 页面。
点击包括 Google提供的角色授权复选框。
查找格式为
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
的服务账号。对于此服务账号,点击修改主账号按钮。
根据需要,点击添加其他角色。
搜索并点击 Service account token creator 角色 (
roles/iam.serviceAccountTokenCreator
)。点击保存。
使用身份联合创建应用注册
如需从 Azure Event Hubs 提取数据,请向 Microsoft Identity Platform 注册应用,并为您的服务账号启用身份联合。这样,您的服务账号就可以对 Azure 进行身份验证。
如需详细了解如何向 Microsoft Identity Platform 注册应用,请参阅 Azure 应用注册快速入门。
登录 Azure 门户,然后打开 Microsoft Entra ID 页面。
在导航窗格中,依次点击管理 > 应用注册。
点击 New registration(新注册)。
为应用命名,并将支持的账号类型设为除仅限个人 Microsoft 账号以外的任何类型。
如需注册应用,请点击注册。
打开该应用,然后依次点击 Manage(管理)> Certificates & Secrets(证书和密钥)。
点击添加凭据。
如需配置联合凭据,请点击 Other issuer(其他颁发者)。
对于颁发者字段,输入
https://accounts.google.com
。在值字段中,输入您的 Pub/Sub 服务账号的唯一 ID。
您可以在记录服务账号唯一 ID 中找到此 ID。
为联合身份命名,然后点击添加。
向已注册的应用授予角色分配
若要让 Pub/Sub 能够从 Azure Event Hub 读取数据,请向已注册的应用授予必要的角色。
登录 Azure 门户,然后打开您的 Event Hubs 命名空间。
如需打开某个命名空间,请在搜索框中输入 Event Hubs,然后点击其中一个命名空间。
在边栏中,点击访问控制 (IAM)。
依次点击添加 > 添加角色分配。
选择 Azure Event Hubs Data Receiver 角色,然后点击 Next。
这会向 Pub/Sub 服务账号授予对您的 Azure 事件中心的读取权限。
点击 + 选择成员,然后搜索您已注册的应用。
在搜索字段中输入已注册的应用名称。
点击应用的名称,然后点击选择。
点击检查 + 分配。
重复第 3-6 步,然后添加 Azure Event Hubs Data Sender 角色。
此角色会授予 Google Cloud 服务账号从 Azure Event Hub 提取元数据的权限。
如需详细了解如何分配 Azure 角色,请访问分配 Azure 角色页面。
将 Pub/Sub 发布商角色添加到 Pub/Sub 正文
如需启用发布功能,您必须向 Pub/Sub 服务账号分配发布商角色,以便 Pub/Sub 能够向 Azure Event Hubs 导入主题发布消息。
启用从所有主题发布内容
如果您尚未创建任何 Azure Event Hubs 导入主题,请使用此方法。
在 Google Cloud 控制台中,转到 IAM 页面。
点击包括 Google提供的角色授权复选框。
查找格式为
service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
的服务账号。对于此服务账号,点击修改主账号按钮。
根据需要,点击添加其他角色。
搜索并点击 Pub/Sub 发布商角色 (
roles/pubsub.publisher
)。点击保存。
启用从单个主题发布
仅当 Azure Event Hubs 导入主题已存在时,才使用此方法。
In the Google Cloud console, 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.
运行
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
:项目编号。如需查看项目编号,请参阅标识项目。
向服务账号添加服务账号用户角色
Service Account User 角色 (roles/iam.serviceAccountUser
) 包含 iam.serviceAccounts.actAs
权限,可让主账号将服务账号附加到 Azure Event Hubs 导入主题的提取设置,并使用该服务账号进行联合身份验证。
在 Google Cloud 控制台中,转到 IAM 页面。
对于发出创建或更新主题调用的主账号,请点击修改主账号按钮。
根据需要,点击添加其他角色。
搜索并点击 Service Account User 角色 (
roles/iam.serviceAccountUser
)。点击保存。
使用 Azure 事件中心导入主题
您可以创建新的导入主题,也可以修改现有主题。
注意事项
分别创建主题和订阅(即使是快速连续创建)可能会导致数据丢失。在订阅之前,主题会存在一小段时间。如果在此期间向主题发送了任何数据,这些数据将丢失。通过先创建主题、创建订阅,然后将主题转换为导入主题,您可以确保在导入过程中不会遗漏任何消息。
如果您需要重新创建同名现有导入主题的 Azure Event Hub,则不能仅删除 Azure Event Hub 并重新创建。此操作可能会使 Pub/Sub 的偏移量管理失效,从而导致数据丢失。如需缓解此问题,请按以下步骤操作:
- 删除 Pub/Sub 导入主题
- 删除 Azure 事件中心
- 创建 Azure 事件中心
- 创建 Pub/Sub 导入主题
系统始终从 earliest offset(最早的偏移量)读取 Azure Event Hub 中的数据。
创建 Azure Event Hubs 导入主题
如需详细了解与主题关联的属性,请参阅主题的属性。
确保您已完成以下步骤:
如需创建 Azure Event Hubs 导入主题,请按以下步骤操作:
控制台
在 Google Cloud 控制台中,前往主题页面。
点击创建主题。
在主题 ID 字段中,输入 Azure Event Hubs 导入主题的 ID。如需详细了解如何命名主题,请参阅命名准则。
选择添加默认订阅。
选择启用提取。
对于提取来源,请选择 Azure Event Hubs。
输入以下详细信息:
资源组:包含您计划提取到 Pub/Sub 的 Azure Event Hubs 命名空间的 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 Event Hubs 资源组的订阅的订阅 ID。此值应为 UUID。如需查找订阅 ID,请访问 Azure“获取订阅和租户 ID”页面。
服务账号:您在在 Google Cloud中创建服务账号中创建的服务账号。
其余字段保留默认值。
点击创建主题。
gcloud
-
In the Google Cloud console, 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.
运行
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
:Azure 事件中心命名空间的名称,其中包含您计划提取到 Pub/Sub 的 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 中创建服务账号 Google Cloud中创建的服务账号
Go
在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 Go 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Go API 参考文档。
如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Java API 参考文档。
如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Python API 参考文档。
如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C++
在尝试此示例之前,请按照 Pub/Sub 快速入门:使用客户端库中的 C++ 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub C++ API 参考文档。
如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js (TypeScript)
在尝试此示例之前,请按照《Pub/Sub 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。 如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
如需向 Pub/Sub 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如果您遇到问题,请参阅“排查 Azure Event Hubs 导入问题”主题。
修改 Azure 事件中心导入主题
如需修改 Azure Event Hubs 导入主题的数据提取数据源设置,请按以下步骤操作:
控制台
在 Google Cloud 控制台中,前往主题页面。
点击“Azure Event Hubs 导入”主题。
在主题详情页面中,点击修改。
更新您要更改的字段。
点击更新。
gcloud
-
In the Google Cloud console, 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.
使用以下示例中提到的所有标志运行
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 命名空间的 Azure Event Hubs 资源组的名称。NAMESPACE
:包含要提取到 Pub/Sub 的 Azure 事件中心的 Azure Event Hubs 命名空间的名称。EVENT_HUB
:要提取到 Pub/Sub 的 Azure 事件中心的名称。CLIENT_ID
:Azure 中已注册应用的应用(客户端)ID,其中包含Google Cloud 服务账号的联合身份。此值应为 UUID。 如需了解详情,请参阅 Azure 应用注册页面。TENANT_ID
:您要将其数据提取到 Pub/Sub 的 Azure 事件中心所属的租户的目录 (租户) ID。此值应为 UUID。如需查找租户 ID,请参阅访问“获取订阅和租户 ID”页面。SUBSCRIPTION_ID
:拥有您要提取到 Pub/Sub 的 Azure 事件中心的订阅的订阅 ID。此值应为 UUID。如需查找订阅 ID,请参阅 Azure 获取订阅 ID 和租户 ID。SERVICE_ACCOUNT
:您在在 Google Cloud中创建服务账号中创建的服务账号
配额和限制
导入主题的发布者吞吐量受主题的发布配额的约束。如需了解详情,请参阅 Pub/Sub 配额和限制。
后续步骤
为您的主题选择订阅类型。
了解如何向主题发布消息。
使用 gcloud CLI、REST API 或客户端库创建或修改主题。