Azure Event Hubs를 다른 지역으로 재배치

이 문서에서는 Event Hubs 네임스페이스 및 구성 설정을 다른 지역에 복사하는 방법을 보여 줍니다.

Event Hubs 네임스페이스를 포함하는 Azure 리소스 그룹에 다른 리소스가 있는 경우 모든 관련 리소스를 한 번에 새 지역으로 이동할 수 있도록 리소스 그룹 수준에서 템플릿을 내보낼 수 있습니다. 리소스 그룹 템플릿으로 내보내는 방법을 알아보려면 리소스 그룹에서 지역 간 리소스 이동을 참조하세요.

필수 조건

  • 계정에서 사용하는 서비스 및 기능이 대상 지역에서 지원되는지 확인합니다.

  • 네임스페이스의 Event Hubs에 대해 캡처 기능을 사용하도록 설정한 경우 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 및 서브넷을 미리 만들어야 합니다. 이러한 두 리소스를 Azure Resource Mover 도구를 사용하여 이동하는 경우 서비스 엔드포인트가 자동으로 구성되지 않습니다. 따라서 Azure Portal, Azure CLI 또는 Azure PowerShell를 통해 수동으로 구성해야 합니다.

프라이빗 엔드포인트에 대한 고려 사항

Azure Private Link는 가상 네트워크에서 Azure PaaS(Platform as a Service), 고객 소유 또는 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. 편집기에서 사용자 고유의 템플릿을 빌드합니다.를 선택합니다.

  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 파일의 위치 속성을 대상 지역으로 편집합니다. 이 예제에서는 대상 지역을 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. 저장을 선택하여 템플릿을 저장합니다.

재배포

  1. Azure Portal에서 리소스 만들기를 선택합니다.

  2. Marketplace 검색에서 템플릿 배포를 입력하고 템플릿 배포(사용자 지정 템플릿을 사용하여 배포)를 선택합니다.

  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가 Storage 계정을 사용하여 이벤트를 캡처하는 경우 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 클러스터를 한 지역에서 다른 지역으로 이동하는 방법에 대한 지침은 Event Hubs를 다른 지역으로 재배치 문서를 참조하세요.

Azure에서 지역 및 재해 복구 간에 리소스를 이동하는 방법에 대한 자세한 내용은 다음을 참조하세요.