你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 Azure 事件中心迁移到另一个区域

本文介绍如何将事件中心命名空间和配置设置复制到另一个区域。

如果在包含事件中心命名空间的 Azure 资源组中还有其他资源,则可能需要在资源组级别导出模板,以便可以通过一个步骤将所有相关资源移动到新区域。 若要了解如何将资源组导出到模板,请参阅跨区域移动(资源组中的)资源

先决条件

  • 确保帐户使用的服务和功能在目标区域中受支持。

  • 如果在命名空间中为事件中心启用了捕获功能,请在移动事件中心命名空间之前首先移动 Azure 存储或 Azure Data Lake Store Gen 2 帐户。 还可以按照与本文所述步骤类似的步骤,将包含存储和事件中心命名空间的资源组移到另一个区域。

  • 如果事件中心命名空间位于事件中心群集中,则在执行本文中的步骤之前,请将专用群集移到目标区域。 还可以使用 GitHub 上的快速入门模板创建事件中心群集。 在模板中,删除 JSON 的命名空间部分以仅创建群集。

  • 标识所有资源依赖项。 根据事件中心的部署方式,以下服务可能需要在目标区域中部署

  • 标识所有依赖资源。 事件中心是一个消息传递系统,允许应用程序发布和订阅消息。 考虑目标区域的应用程序是否需要它在源区域上具有的同一组依赖服务的消息传递支持。

停机时间

若要了解可能涉及的停机,请参阅适用于 Azure 的云采用框架:选择迁移方法

服务终结点注意事项

通过 Azure 事件中心的虚拟网络服务终结点可将访问限制为指定虚拟网络。 此外,还可通过这些终结点将访问限制为一系列 IPv4(Internet 协议版本 4)地址范围。 任何从外部连接到事件中心的用户都无法访问这些资源。 如果在事件中心资源的源区域中配置了服务终结点,则需要在目标区域中执行相同的操作。

若要成功将事件中心重新创建到目标区域,必须事先创建 VNet 和子网。 如果使用 Azure 资源转移器工具执行所有这些资源的移动,则不会自动配置服务终结点。 因此,需要手动配置服务终结点,这可以通过 Azure 门户Azure CLIAzure PowerShell 来完成。

专用终结点注意事项

Azure 专用链接提供从虚拟网络到 Azure 平台即服务 (PaaS)、客户拥有的服务或 Microsoft 合作伙伴服务的专用连接。 专用链接简化了网络体系结构,并通过消除数据在公共 Internet 上的暴露来保护 Azure 中终结点之间的连接。

若要成功在目标区域中重新创建事件中心,必须事先创建 VNet 和子网,然后才能进行实际重新创建。

准备

若要开始,请导出资源管理器模板。 此模板包含描述事件中心命名空间的设置。

  1. 登录到 Azure 门户

  2. 选择“所有资源”,然后选择你的事件中心命名空间。

  3. 在“事件中心命名空间”页上,选择左侧菜单中的“自动化”下的“导出模版”。

  4. 选择“导出模板”页中的“下载”。

    显示资源管理器模板下载位置的屏幕截图

  5. 找到从门户下载的 .zip 文件,并将该文件解压缩到所选的文件夹。

    此 zip 文件包含 .json 文件,后者包括模板和用于部署模板的脚本。

修改模板

通过更改事件中心命名空间名称和区域来修改模板。

  1. 选择“模板部署”。

  2. 在 Azure 门户中,选择“创建”

  3. 选择“在编辑器中生成自己的模板”。

  4. 选择“加载文件”,然后按说明加载在上一部分下载的 template.json 文件。

  5. 在 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"
         },
     },
    
  6. template.json 文件中的 location 属性编辑为目标区域。 此示例将目标区域设置为 centralus

    "resources": [
        {
            "type": "Microsoft.KeyVault/vaults",
            "apiVersion": "2023-07-01",
            "name": "[parameters('vaults_name')]",
            "location": "centralus",
    
        },
    
    ]
    
    
     "resources": [
     {
         "type": "Microsoft.EventHub/namespaces",
         "apiVersion": "2023-01-01-preview",
         "name": "[parameters('namespaces_name')]",
         "location": "centralus",
    
      },
     {
         "type": "Microsoft.EventHub/namespaces/authorizationrules",
         "apiVersion": "2023-01-01-preview",
         "name": "[concat(parameters('namespaces_name'), '/RootManageSharedAccessKey')]",
         "location": "centralus",
         "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": "centralus",
         "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": "centralus",
         "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 位置。 区域的代码是不带空格的区域名称,“美国中部” = “centralus”。

  7. 删除模板中类型专用终结点的资源。

     {
         "type": "Microsoft.EventHub/namespaces/privateEndpointConnections",
    
     }
    
  8. 如果在事件中心配置了服务终结点,请在 networkrulesets 部分的 virtualNetworkRules 下为目标子网添加规则。 确保将 ignoreMissingVnetServiceEndpoint_ flag 设置为 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": "centralus",
        "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
        }
    },
    
    
  9. 选择“保存”以保存该模板。

重新部署

  1. 在 Azure 门户中,选择“创建资源”。

  2. 在“搜索市场”中,键入“模板部署”并选择“模板部署(使用自定义模板进行部署)” 。

  3. 选择“在编辑器中生成自己的模板”。

  4. 选择“加载文件”,然后按照说明加载在上部分修改的 template.json 文件

  5. 在“自定义部署”页上执行以下步骤:

    1. 选择 Azure 订阅。
    2. 选择现有的资源组或创建一个资源组。 如果源命名空间位于事件中心群集中,请在目标区域中选择包含群集的资源组。
    3. 选择目标位置或区域。 如果选择了现有资源组,则此设置为只读。
    4. 在“设置”部分中,执行以下步骤:
      1. 输入新命名空间名称。

        部署资源管理器模板

      2. 如果源命名空间位于事件中心群集中,请输入资源组和事件中心群集的名称,作为“外部 ID”的一部分。

        /subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<CLUSTER'S RESOURCE GROUP>/providers/Microsoft.EventHub/clusters/<CLUSTER NAME>
        
      3. 如果命名空间中的事件中心使用存储帐户来捕获事件,请为 StorageAccounts_<original storage account name>_external 字段指定资源组名称和存储帐户。

        /subscriptions/0000000000-0000-0000-0000-0000000000000/resourceGroups/<STORAGE'S RESOURCE GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>
        
    5. 在页面底部选择“查看 + 创建”。
    6. 在“查看 + 创建”页上查看设置,然后选择“创建” 。
  6. 需要在新的事件中心重新配置网络配置设置(专用终结点)。

丢弃或清理

部署后,如果要重新开始,则可以删除目标事件中心命名空间,并重复执行本文的准备移动部分中所述的步骤。

若要提交更改并完成事件中心命名空间的移动,请删除原始区域中的事件中心命名空间。 请确保在删除命名空间前处理了该命名空间中的所有事件。

若要使用 Azure 门户删除事件中心命名空间(源或目标),请执行以下操作:

  1. 在 Azure 门户顶部的搜索窗口中,键入“事件中心”,然后从搜索结果中选择“事件中心”。 此时会在列表中看到事件中心命名空间。

  2. 选择要删除的目标命名空间,并从工具栏中选择“删除”。

    显示“删除命名空间 -”按钮的屏幕截图

  3. 在“删除命名空间”页上,键入命名空间名称,然后选择“删除”以确认删除 。

后续步骤

本操作说明介绍了如何将事件中心命名空间从一个区域移到另一个区域。

有关将事件中心群集从一个区域移动到另一个区域的说明,请参阅将事件中心迁移到另一个区域一文。

若要详细了解如何在区域之间移动资源,以及如何在 Azure 中进行灾难恢复,请参阅: