本文介绍如何将事件中心命名空间和配置设置复制到另一个区域。
如果 Azure 资源组中包含事件中心命名空间的其他资源,则可以在资源组级别导出模板,以便在一个步骤中将所有相关资源移动到新区域。 若要了解如何将资源组导出到模板,请参阅跨区域移动(资源组中的)资源。
先决条件
请确保你的帐户使用的服务和功能在目标区域中受支持。
如果在命名空间中为事件中心启用了捕获功能,请在移动事件中心命名空间之前首先移动 Azure 存储或 Azure Data Lake Store Gen 2 帐户。 还可以按照与本文所述步骤类似的步骤,将包含存储和事件中心命名空间的资源组移到另一个区域。
如果事件中心命名空间位于事件中心群集中,则在执行本文中的步骤之前,请将专用群集移到目标区域。 还可以使用 GitHub 上的快速入门模板创建事件中心群集。 在模板中,删除 JSON 的命名空间部分以仅创建群集。
标识所有资源依赖项。 根据部署事件中心的方式,以下服务 可能需要 在目标区域中部署:
标识所有依赖资源。 事件中心是一个消息传递系统,允许应用程序发布和订阅消息。 考虑目标区域的应用程序是否需要它在源区域上具有的同一组依赖服务的消息传递支持。
停机时间
要了解可能涉及的故障时间,请参阅面向 Azure 的云采用框架:选择重定位方法。
服务终结点注意事项
通过 Azure 事件中心的虚拟网络服务终结点可将访问限制为指定虚拟网络。 此外,还可通过这些终结点将访问限制为一系列 IPv4(Internet 协议版本 4)地址范围。 任何从外部连接到事件中心的用户都无法访问这些资源。 如果在事件中心资源的源区域中配置了服务终结点,则需要在目标区域中执行相同的操作。
若要成功将事件中心重新创建到目标区域,必须事先创建虚拟网络和子网。 如果使用 Azure 资源移动器工具执行这两个资源的移动,则无法自动配置服务终结点。 因此,需要手动配置,这可以通过 Azure 门户、Azure CLI 或 Azure PowerShell 来完成。
专用终结点注意事项
Azure 专用链接提供从虚拟网络到 Azure 平台即服务 (PaaS)、客户拥有的服务或 Microsoft 合作伙伴服务的专用连接。 专用链接简化了网络体系结构,并通过消除数据在公共 Internet 上的暴露来保护 Azure 中终结点之间的连接。
若要成功重新创建目标区域中的事件中心,必须在实际重新创建之前创建虚拟网络和子网。
准备
若要开始,请导出资源管理器模板。 此模板包含描述事件中心命名空间的设置。
登录到 Azure 门户。
选择“所有资源”,然后选择你的事件中心命名空间。
在“事件中心命名空间”页上,选择左侧菜单中的“自动化”下的“导出模版”。
在“导出模板”页面中选择“下载”。
找到从门户下载的 .zip 文件,并将该文件解压缩到所选的文件夹。
此 zip 文件包含 .json 文件,后者包括模板和用于部署模板的脚本。
修改模板
通过更改事件中心命名空间名称和区域来修改模板。
选择“模板部署”。
在 Azure 门户中,选择“创建”。
选择“在编辑器中生成自己的模板”。
选择“加载文件”,然后按说明加载在上一部分下载的 template.json 文件。
在 template.json 文件中,通过设置命名空间名称的默认值来命名事件中心命名空间。 此示例将事件中心命名空间名称的默认值设置为
namespace-name
。"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "namespaces_name": { "defaultValue": "namespace-name", "type": "String" }, },
将 template.json 文件中的 location 属性编辑为目标区域。
"resources": [ { "type": "Microsoft.KeyVault/vaults", "apiVersion": "2023-07-01", "name": "[parameters('vaults_name')]", "location": "chinanorth3", }, { "type": "Microsoft.EventHub/namespaces", "apiVersion": "2023-01-01-preview", "name": "[parameters('namespaces_name')]", "location": "chinanorth3", }, { "type": "Microsoft.EventHub/namespaces/authorizationrules", "apiVersion": "2023-01-01-preview", "name": "[concat(parameters('namespaces_name'), '/RootManageSharedAccessKey')]", "location": "chinanorth3", "dependsOn": [ "[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_name'))]" ], "properties": { "rights": [ "Listen", "Manage", "Send" ] } }, { "type": "Microsoft.EventHub/namespaces/networkrulesets", "apiVersion": "2023-01-01-preview", "name": "[concat(parameters('namespaces_name'), '/default')]", "location": "chinanorth3", "dependsOn": [ "[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_name'))]" ], "properties": { "publicNetworkAccess": "Enabled", "defaultAction": "Deny", "virtualNetworkRules": [ { "subnet": { "id": "[concat(parameters('virtualNetworks_vnet_akv_externalid'), '/subnets/default')]" }, "ignoreMissingVnetServiceEndpoint": false } ], "ipRules": [], "trustedServiceAccessEnabled": false } }, { "type": "Microsoft.EventHub/namespaces/privateEndpointConnections", "apiVersion": "2023-01-01-preview", "name": "[concat(parameters('namespaces_peterheesbus_name'), '/81263915-15d5-4f14-8d65-25866d745a66')]", "location": "chinanorth3", "dependsOn": [ "[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_peterheesbus_name'))]" ], "properties": { "provisioningState": "Succeeded", "privateEndpoint": { "id": "[parameters('privateEndpoints_pvs_eventhub_externalid')]" }, "privateLinkServiceConnectionState": { "status": "Approved", "description": "Auto-Approved" } } } ]
若要获取区域位置代码,请参阅 Azure 位置。 区域的代码是无空格的区域名称, 中国北部 3 = chinanorth3。
删除模板中类型专用终结点的资源。
{ "type": "Microsoft.EventHub/namespaces/privateEndpointConnections", }
如果在事件中心配置了服务终结点,请在
networkrulesets
部分的virtualNetworkRules
下为目标子网添加规则。 确保将ignoreMissingVnetServiceEndpoint
标志设置为False
,这样如果目标区域中未配置服务终结点,IaC 将无法部署事件枢纽。parameter.json
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "target_vnet_externalid": { "value": "virtualnetwork-externalid" }, "target_subnet_name": { "value": "subnet-name" } } }
template.json
{ "type": "Microsoft.EventHub/namespaces/networkrulesets", "apiVersion": "2023-01-01-preview", "name": "[concat(parameters('namespaces_name'), '/default')]", "location": "chinanorth3", "dependsOn": [ "[resourceId('Microsoft.EventHub/namespaces', parameters('namespaces_name'))]" ], "properties": { "publicNetworkAccess": "Enabled", "defaultAction": "Deny", "virtualNetworkRules": [ { "subnet": { "id": "[concat(parameters('target_vnet_externalid'), concat('/subnets/', parameters('target_subnet_name')))]" }, "ignoreMissingVnetServiceEndpoint": false } ], "ipRules": [], "trustedServiceAccessEnabled": false } }
选择“保存”以保存该模板。
重新部署
在 Azure 门户中,选择“创建资源”。
在市场中搜索,键入模板部署,并选择模板部署(通过自定义模板进行部署)。
选择“在编辑器中生成自己的模板”。
选择“加载文件”,然后按照说明加载在上部分修改的 template.json 文件。
在“自定义部署”页上执行以下步骤:
选择 Azure 订阅。
选择现有的资源组或创建一个资源组。 如果源命名空间位于事件中心群集中,请在目标区域中选择包含群集的资源组。
选择目标位置或区域。 如果选择了现有资源组,则此设置为只读。
在 “设置” 部分中,执行以下步骤:
输入新命名空间名称。
如果源命名空间位于事件中心群集中,请输入资源组和事件中心群集的名称,作为“外部 ID”的一部分。
/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<CLUSTER'S RESOURCE GROUP>/providers/Microsoft.EventHub/clusters/<CLUSTER NAME>
如果命名空间中的事件中心使用存储帐户来捕获事件,请为
StorageAccounts_<original storage account name>_external
字段指定资源组名称和存储帐户。/subscriptions/0000000000-0000-0000-0000-0000000000000/resourceGroups/<STORAGE'S RESOURCE GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>
在页面底部选择查看 + 创建。
在“查看 + 创建”页上查看设置,然后选择“创建” 。
需要在新的事件中心重新配置网络配置设置(专用终结点)。
弃置或清理
部署后,如果要重新开始,则可以删除目标事件中心命名空间,并重复执行本文的准备和移动部分中所述的步骤。
若要提交更改并完成事件中心命名空间的移动,请删除原始区域中的事件中心命名空间。 请确保在删除命名空间前处理了该命名空间中的所有事件。
若要使用 Azure 门户删除事件中心命名空间(源或目标),请执行以下操作:
在 Azure 门户顶部的搜索窗口中,键入“事件中心”,然后从搜索结果中选择“事件中心”。 此时会在列表中看到事件中心命名空间。
选择要删除的目标命名空间,并从工具栏中选择“删除”。
在“删除命名空间”页上,键入命名空间名称,然后选择“删除”以确认删除 。
后续步骤
本文介绍了如何将事件中心命名空间从一个区域移到另一个区域。
有关将事件中心群集从一个区域移动到另一个区域的说明,请参阅将事件中心迁移到另一个区域一文。
若要详细了解如何在区域之间移动资源,以及如何在 Azure 中进行灾难恢复,请参阅: