將 Azure 事件中樞 重新放置到另一個區域

本文說明如何將事件中樞命名空間和組態設定複製到另一個區域。

如果您在包含事件中樞命名空間的 Azure 資源群組中有其他資源,您可以在資源群組層級上匯出範本,以便在一個步驟中將所有相關資源移至新的區域。 若要瞭解如何將資源群組匯出至範本,請參閱跨區域移動資源(從資源群組)。

必要條件

  • 確定目的地區域中支援您帳戶所使用的服務和功能。

  • 如果您已在命名空間中啟用事件中樞的擷取功能,請先移動 Azure 儲存體 或 Azure Data Lake Store Gen 2 帳戶,再移動事件中樞命名空間。 您也可以遵循這篇文章中所述的步驟,將包含儲存體和事件中樞命名空間的資源群組移至另一個區域。

  • 如果事件中樞命名空間在事件中樞叢集中,請先將專用叢集移至目標區域,再進行本文中的步驟。 您也可以使用 GitHub 上的快速入門範本來建立事件中樞叢集。 在範本中,移除 JSON 的命名空間部分,只建立叢集。

  • 識別所有資源相依性。 根據您已部署事件中樞的方式,下列服務 可能需要 在目標區域中部署:

  • 識別所有相依資源。 事件中樞是一種訊息系統,可讓應用程式發佈和訂閱訊息。 請考慮目標應用程式是否需要對來源目標上相同相依服務集的傳訊支援。

停機

若要瞭解可能的停機時間,請參閱 azure 的 雲端採用架構:選取重新配置方法

服務端點的考慮

Azure 事件中樞的虛擬網路服務端點會限制對指定虛擬網路的存取。 端點也可以限制對IPv4(因特網通訊協定第4版)位址範圍的存取。 從這些來源外部連線到事件中樞的任何用戶都會遭到拒絕存取。 如果服務端點是在事件中樞資源的來源區域中設定的,則必須在目標區域中完成相同的動作。

若要成功將事件中樞重新建立至目標區域,必須先事先建立 VNet 和子網。 如果是使用 Azure Resource Mover 工具進行這兩個資源的移動,則不會自動設定服務端點。 因此,必須手動設定,這可以透過 Azure 入口網站Azure CLIAzure PowerShell 來完成。

私人端點的考慮

Azure Private Link 提供從虛擬網路到 Azure 平臺即服務(PaaS)、客戶擁有或 Microsoft 合作夥伴服務的私人連線。 Private Link 可簡化網路架構,並藉由排除公開公用因特網的數據,來保護 Azure 中端點之間的連線。

若要成功重新建立目標區域中的事件中樞,必須先建立 VNet 和子網,才能進行實際的重新建立。

準備

若要開始,請匯出 Resource Manager 範本。 此範本包含描述事件中樞命名空間的設定。

  1. 登入 Azure 入口網站

  2. 選取 [所有資源],然後選取您的事件中樞命名空間。

  3. 在 [事件中樞命名空間] 頁面上,選取左側功能表中 [自動化] 底下的 [匯出範本]

  4. [匯出範本] 頁面中選擇 [下載]

    顯示下載 Resource Manager 範本位置的螢幕快照

  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 位置。 區域名稱除去空格即為區域代碼,Central US = centralus

  7. 拿掉範本中私人端點類型的資源。

     {
         "type": "Microsoft.EventHub/namespaces/privateEndpointConnections",
    
     }
    
  8. 如果您在事件中樞中設定服務端點,請在 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": "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. 在 [搜尋 Marketplace] 中,輸入範本部署,然後選取 [範本部署 (使用自訂範本部署)]

  3. 選取 [在編輯器中組建您自己的範本]

  4. 選取 [載入檔案],然後依照指示載入 您在上一節中修改的 template.json檔案。

  5. 在 [自訂部署] 頁面上,依照下列步驟執行:

    1. 選取 Azure 訂用帳戶
    2. 選取現有的資源群組,或建立一個群組。 如果來源命名空間是在事件中樞叢集中,請選取目標區域中包含叢集的資源群組。
    3. 選取目標位置或區域。 若已選取現有的資源群組,這項設定則為唯讀狀態。
    4. 在 [設定] 區段中,執行下列步驟:
      1. 輸入新的命名空間名稱

        部署 Resource Manager 範本

      2. 如果來源命名空間是在事件中樞叢集中,請在 [外部識別碼] 中輸入資源群組事件中樞叢集的名稱。

        /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 中的區域之間移動資源和災害復原,請參閱: