Azure Event Hubs を別のリージョンに再配置する

この記事では、Event Hubs 名前空間と構成設定を別のリージョンにコピーする方法について説明します。

Event Hubs 名前空間を含む Azure リソース グループに他のリソースがある場合は、すべての関連リソースを 1 回の手順で新しいリージョンに移動できるように、リソース グループ レベルでテンプレートをエクスポートすることをお勧めします。 リソース グループをテンプレートにエクスポートする方法については、「(リソース グループの) リソースをリージョン間で移動する」を参照してください。

前提条件

  • お使いのアカウントで使用されるサービスと機能が、ターゲット リージョンでサポートされていることを確認してください。

  • 名前空間のイベント ハブに対してキャプチャ機能を有効にしている場合は、Event Hubs 名前空間を移動する前に、Azure Storage または Azure Data Lake Store Gen 2 アカウントを移動します。 この記事で説明されている内容と同様の手順に従って、Storage と Event Hubs の両方の名前空間を含むリソース グループを他のリージョンに移動することもできます。

  • Event Hubs 名前空間が Event Hubs クラスターにある場合は、この記事の手順を行う前に、ターゲット リージョン専用クラスターを移動します。 GitHub 上のクイックスタート テンプレートを使用して Event Hubs クラスターを作成することもできます。 このテンプレートから JSON の名前空間の部分を削除して、クラスターのみを作成します。

  • リソースのすべての依存関係を特定します。 Event Hubs のデプロイ方法によっては、次のサービスでターゲット リージョンへのデプロイが必要になる場合があります。

  • すべての依存リソースを特定します。 Event Hubs は、アプリケーションでメッセージの発行と購読ができるようにする、メッセージング システムです。 ターゲットのアプリケーションで、ソース ターゲットにあったのと同じ依存サービスのセットに対するメッセージング サポートが必要かどうかを検討します。

ダウンタイム

起こり得るダウンタイムを理解するには、「Azure 向けのクラウド導入フレームワーク: 再配置方法を選択する」を参照してください。

サービス エンドポイントに関する考慮事項

Azure Event Hubs の仮想ネットワーク サービス エンドポイントは、指定した仮想ネットワークへのアクセスを制限します。 エンドポイントは、IPv4 (インターネット プロトコル バージョン 4) アドレス範囲のリストへのアクセスを制限することもできます。 これらのソース以外から Event Hubs に接続しようとするユーザーは、アクセスを拒否されます。 Event Hubs リソースのソース リージョンでサービス エンドポイントが構成されている場合は、ターゲット リージョンでも同じ手順を実行する必要があります。

ターゲット リージョンで Event Hubs を正常に再作成するには、VNet とサブネットを事前に作成する必要があります。 これら 2 つのリソースの移動が Azure Resource Mover ツールで実行される場合、サービス エンドポイントは自動的に構成されません。 そのため、手動で構成する必要があります。これは、Azure portalAzure CLI、または Azure PowerShell 経由で行うことができます。

プライベート エンドポイントに関する考慮事項

Azure Private Link を使用すると、仮想ネットワークから Azure のサービスとしてのプラットフォーム (PaaS)、お客様が所有するサービス、または Microsoft パートナーのサービスへのプライベート接続が可能になります。 Private Link がネットワーク アーキテクチャを簡素化し、パブリック インターネットへのデータの公開をなくすことで Azure のエンドポイント間の接続をセキュリティで保護します。

ターゲット リージョンで Event Hubs を正常に再作成するには、実際に再作成が行なわれる前に、VNet とサブネットが作成されている必要があります。

準備

まず、Resource Manager テンプレートをエクスポートします。 このテンプレートには、Event Hubs 名前空間を説明する設定が含まれています。

  1. Azure portal にサインインします。

  2. [すべてのリソース] を選択し、Event Hubs 名前空間を選択します。

  3. [Event Hubs 名前空間] ページで、左側のメニューにある [オートメーション][テンプレートのエクスポート] を選択します。

  4. [テンプレートのエクスポート] ページで [ダウンロード] を選択します。

    Resource Manager テンプレートのダウンロード先を示すスクリーンショット

  5. ポータルからダウンロードした .zip ファイルを見つけて、選択したフォルダーにそのファイルを解凍します。

    この zip ファイルには、テンプレートとテンプレートをデプロイするためのスクリプトから構成される .json ファイルが含まれています。

テンプレートの変更

Event Hubs の名前空間の名前とリージョンを変更して、テンプレートを変更します。

  1. [テンプレートのデプロイ] を選択します。

  2. Azure portal で、[作成] を選択します。

  3. [Build your own template in the editor] (エディターで独自のテンプレートをビルド) を選択します。

  4. [ファイルの読み込み] を選択し、手順に従って、前のセクションでダウンロードした template.json ファイルを読み込みます。

  5. template.json ファイルで、名前空間の名前に既定値を設定して、Event Hubs の名前空間に名前を付けます。 この例では、Event Hubs 名前空間の名前の既定値を 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. Event Hubs でサービス エンドポイントを構成した場合は、[networkrulesets] セクション内の [virtualNetworkRules] の下で、ターゲット サブネットのルールを追加します。 ターゲット リージョンでサービス エンドポイントが構成されていない場合に、IaC が Event Hubs のデプロイに失敗するように、ignoreMissingVnetServiceEndpoint フラグが False に設定されていることを確認します。

    _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. [保存] を選択してテンプレートを保存します。

Redeploy

  1. Azure Portal で、 [リソースの作成] を選択します。

  2. [Marketplace を検索] に、「template deployment」と入力し、 [テンプレートのデプロイ (カスタム テンプレートを使用したデプロイ)] を選択します。

  3. エディターで独自のテンプレートをビルド を選択します。

  4. [ファイルの読み込み] を選択した後に手順に従い、前のセクションで変更した template.json ファイルを読み込みます。

  5. [カスタム デプロイ] ページで、次の手順を行います。

    1. Azure サブスクリプションを選択します。
    2. 既存のリソース グループを選択するか、新しく作成することができます。 ソース名前空間が Event Hubs クラスター内にあった場合は、ターゲット リージョンにクラスターを含むリソース グループを選択します。
    3. ターゲットの場所またはリージョンを選択します。 既存のリソース グループを選択した場合、この設定は読み取り専用になります。
    4. [設定] セクションで、次の手順を行います。
      1. 新しい名前空間名を入力します。

        Resource Manager テンプレートをデプロイする

      2. ソース名前空間が Event Hubs クラスターに含まれていた場合は、外部 ID の一部としてリソース グループおよびEvent Hubs クラスターの名前を指定します。

        /subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<CLUSTER'S RESOURCE GROUP>/providers/Microsoft.EventHub/clusters/<CLUSTER NAME>
        
      3. 名前空間の Event Hubs がイベントのキャプチャにストレージ アカウントを使用する場合は、[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. 新しい Event Hubs 内には、ネットワーク構成設定 (プライベート エンドポイント) を再構成する必要があります。

破棄またはクリーンアップ

デプロイ後に、最初からやり直す場合は、ターゲット Event Hubs 名前空間を削除し、この記事の「準備」と「移動」のセクションに示されている手順を繰り返します。

変更をコミットし、Event Hubs 名前空間の移動を完了するには、元のリージョンの Event Hubs 名前空間を削除します。 名前空間を削除する前に、名前空間内のすべてのイベントを処理したことを確認します。

Azure portal を使用して Event Hubs 名前空間 (ソースまたはターゲット) を削除するには、次の手順を行います。

  1. Azure portal の上部にある検索ウィンドウで「Event Hubs」と入力し、検索結果から [Event Hubs] を選択します。 Event Hubs 名前空間が一覧に表示されます。

  2. 削除するターゲット名前空間を選択し、ツールバーの [削除] を選択します。

    [名前空間の削除] ボタンを示すスクリーンショット

  3. [名前空間の削除] ページで、名前空間の名前を入力して削除を確認し、 [削除] を選択します。

次のステップ

この記事では、Event Hubs 名前空間をあるリージョンから別のリージョンに移動する方法について学習しました。

Event Hubs クラスターをあるリージョンから別のリージョン に移動する手順については、「Azure Event Hubs を別のリージョンに再配置する」を参照してください。

リージョン間でのリソースの移動と Azure でのディザスター リカバリーの詳細については、以下を参照してください。