Azure Stack 허브 구독 복제기를 사용 하 여 리소스 복제Replicate resources using the Azure Stack Hub subscription replicator

Azure Stack 허브 구독 복제기 PowerShell 스크립트를 사용 하 여 Azure Stack 허브 스탬프 전체 또는 Azure Stack 허브와 Azure 간에 Azure Stack 허브 구독 간에 리소스를 복사할 수 있습니다.You can use the Azure Stack Hub subscription replicator PowerShell script to copy the resources between Azure Stack Hub subscriptions, across Azure Stack Hub stamps, or between Azure Stack Hub and Azure. 복제기 스크립트는 서로 다른 Azure 및 Azure Stack 허브 구독에서 Azure Resource Manager 리소스를 읽고 다시 작성 합니다.The replicator script reads and rebuilds the Azure Resource Manager resources from different Azure and Azure Stack Hub subscriptions. 이 문서에서는 스크립트가 작동 하는 방법, 스크립트를 사용 하는 방법 및 스크립트 작업에 대 한 참조를 제공 합니다.This article looks at how the script works, how you can use the script, and provides a reference for script operations.

이 문서에 사용 된 스크립트는 Azure Intelligent Edge 패턴 GitHub 리포지토리에서 찾을 수 있습니다.You can find the scripts used in this article in the Azure Intelligent Edge Patterns GitHub repository. 스크립트는 subscription 복제기 폴더에 있습니다.The scripts are in the subscription replicator folder.

구독 복제기 개요Subscription replicator overview

Azure 구독 복제기는 모듈식으로 설계 되었습니다.The Azure subscription replicator was designed to be modular. 이 도구는 리소스 복제를 오케스트레이션 코어 프로세서를 사용 합니다.This tool uses a core processor that orchestrates the resource replication. 또한이 도구는 다양 한 유형의 리소스를 복사 하기 위한 템플릿 역할을 하는 사용자 지정 가능한 프로세서를 지원 합니다.In addition, the tool supports customizable processors that act as templates for copying different types of resources.

핵심 프로세서는 다음 세 가지 스크립트로 구성 됩니다.The core processor is made up of the following three scripts:

  • resource_retriever.ps1resource_retriever.ps1

    • 출력 파일을 저장할 폴더를 생성 합니다.Generates folders to store output files.

    • 컨텍스트를 원본 구독으로 설정 합니다.Sets context to the source subscription.

    • 리소스를 검색 하 고 resource_processor.ps1 함께 전달 합니다.Retrieves the resources and passes them along to resource_processor.ps1.

  • resource_processor.ps1resource_processor.ps1

    • resource_retriever.ps1 에 의해 전달 된 리소스를 처리 합니다.Processes the resource passed in by resource_retriever.ps1.

    • 사용할 사용자 지정 프로세서를 결정 하 고 리소스를 전달 합니다.Determines which customized processor to use and passes the resources.

  • post_process.ps1post_process.ps1

    • Post는 사용자 지정 된 프로세서에 의해 생성 된 출력을 처리 하 여 대상 구독에 배포 될 준비를 합니다.Post processes the output generated by the customized processor to prepare it to be deployed in the target subscription.

    • 대상 구독에서 리소스를 배포 하는 배포 코드를 생성 합니다.Generates deployment code to deploy the resources in the target subscription.

세 가지 스크립트는 표준 방식으로 정보 흐름을 제어 하 여 유연성을 높일 수 있도록 합니다.The three scripts control the flow of information in a standard way to allow for greater flexibility. 예를 들어 추가 리소스에 대 한 지원을 추가 하면 핵심 프로세서의 코드를 변경할 필요가 없습니다.Adding support for additional resources, for example, doesn't require you to change any code in the core processor.

위에서 언급 한 사용자 지정 된 프로세서는 ps1 특정 유형의 리소스를 처리 하는 방법을 지시 하는 파일입니다.Customized processors, that were mentioned above, are ps1 files that dictate how a certain type of resource should be processed. 사용자 지정 된 프로세서의 이름은 항상 리소스의 형식 데이터를 사용 하 여 지정 됩니다.The name of a customized processor is always named using the type data in a resource. 예를 들어,를 $vm 실행 하는 가상 머신 개체가 있다고 가정 $vm 합니다. 형식에서을 생성 Microsoft.Compute/virtualMachines 합니다.For example, assuming $vm holds a virtual machine object, running $vm.Type would yield Microsoft.Compute/virtualMachines. 즉, 가상 컴퓨터에 대 한 프로세서의 이름은로 지정 됩니다 virtualMachines_processor.ps1 .이는 코어 프로세서에서 사용할 사용자 지정 된 프로세서를 결정 하는 방법 처럼 이름이 리소스 메타 데이터에 표시 되는 것과 정확히 일치 해야 합니다.That means, a processor for a virtual machine would be named virtualMachines_processor.ps1, the name must be exactly as it appears in the resource metadata as that is how the core processor determines which customized processor to use.

사용자 지정 프로세서는 중요 한 정보를 확인 하 고 리소스 메타 데이터에서 해당 정보를 가져오는 방법을 지정 하 여 리소스를 복제 하는 방법을 결정 합니다.A customized processor dictates how a resource should be replicated by determining what information is important and dictating how that information should be pulled out of the resource metadata. 그러면 사용자 지정 된 프로세서에서 추출 된 모든 데이터를 가져와이를 사용 하 여 대상 구독에 리소스를 배포 하는 Azure Resource Manager 템플릿과 함께 사용 되는 매개 변수 파일을 생성 합니다.The customized processor then takes all of the extracted data and uses it to generate a parameters file that will be used in conjunction with an Azure Resource Manager template to deploy the resource in the target subscription. 이 매개 변수 파일은 post_process.ps1에서 처리 된 후 Parameter_Files 에 저장 됩니다.This parameters file is stored in the Parameter_Files after it is post processed by post_process.ps1.

Standardized_ARM_Templates 라는 복제기 파일 구조에 폴더가 있습니다.There is a folder in the Replicator file structure named Standardized_ARM_Templates. 원본 환경에 따라 배포에서는 표준화 된 Azure Resource Manager 템플릿 중 하나를 사용 하거나 사용자 지정 된 Azure Resource Manager 템플릿을 생성 해야 합니다.Depending on the source environment, the deployments will use one of these standardized Azure Resource Manager templates, or a customized Azure Resource Manager template will have to be generated. 이 경우 사용자 지정 된 프로세서는 Azure Resource Manager 템플릿 생성기를 호출 해야 합니다.In this case, a customized processor must call an Azure Resource Manager template generator. 앞에서 시작한 예제에서 가상 컴퓨터에 대 한 Azure Resource Manager 템플릿 생성기의 이름은 virtualMachines_ARM_Template_Generator.ps1 로 지정 됩니다.In the example started earlier, the name of an Azure Resource Manager template generator for virtual machines would be named virtualMachines_ARM_Template_Generator.ps1. Azure Resource Manager 템플릿 생성기는 리소스의 메타 데이터에 있는 정보를 기반으로 사용자 지정 된 Azure Resource Manager 템플릿을 만드는 작업을 담당 합니다.The Azure Resource Manager template generator is responsible for creating a customized Azure Resource Manager template based on what information is in the metadata of a resource. 예를 들어 가상 머신 리소스에 가용성 집합의 구성원 임을 지정 하는 메타 데이터가 있는 경우 Azure Resource Manager 템플릿 생성기는 가상 머신이 속한 가용성 집합의 ID를 지정 하는 코드를 사용 하 여 Azure Resource Manager 템플릿을 만듭니다.For example, if the virtual machine resource has metadata specifying that it is a member of an availability set, the Azure Resource Manager template generator will create an Azure Resource Manager template with code specifying the ID of the availability set that the virtual machine is a part of. 이렇게 하면 가상 컴퓨터가 새 구독에 배포 될 때 배포 시 가용성 집합에 자동으로 추가 됩니다.That way when the virtual machine is deployed to the new subscription it automatically gets added to the availability set upon deployment. 이러한 사용자 지정 Azure Resource Manager 템플릿은 Standardized_ARM_Templates 폴더 내에 있는 Custom_ARM_Templates 폴더에 저장 됩니다.These customized Azure Resource Manager templates are stored in the Custom_ARM_Templates folder located inside the Standardized_ARM_Templates folder. post_processor.ps1는 배포가 표준화 된 Azure Resource Manager 템플릿 또는 사용자 지정 된 템플릿 중 하나를 사용 해야 하는지 여부를 결정 하 고 해당 배포 코드를 생성 해야 합니다.The post_processor.ps1 is responsible for determining whether a deployment is supposed to use a standardized Azure Resource Manager template or a customized one and generating the corresponding deployment code.

스크립트 post-process.ps1 는 사용자가 새 리소스를 배포 하는 데 사용할 스크립트를 만들고 매개 변수 파일을 정리 하는 작업을 담당 합니다.The script post-process.ps1 is responsible for cleaning up the parameters files and creating the scripts that the user will use to deploy the new resources. 정리 단계 중에 스크립트는 원본 구독 ID, 테 넌 트 ID 및 위치에 대 한 모든 참조를 해당 대상 값으로 바꿉니다.During the cleaning phase, the script replaces all references to the source subscription ID, tenant ID, and location with the corresponding target values. 그런 다음 매개 변수 파일을 Parameter_Files 폴더에 출력 합니다.It then outputs the parameters file to the Parameter_Files folder. 그런 다음 처리 중인 리소스가 사용자 지정 Azure Resource Manager 템플릿을 사용 하는지 여부를 확인 하 고 AzResourceGroupDeployment cmdlet을 활용 하는 해당 배포 코드를 생성 합니다.It then determines whether the resource being processed uses a customized Azure Resource Manager template or not and generates the corresponding deployment code, which utilizes the New-AzResourceGroupDeployment cmdlet. 그런 다음 배포 코드는 Deployment_Files 폴더에 저장 된 DeployResources.ps1 이라는 파일에 추가 됩니다.The deployment code is then added to file named DeployResources.ps1 stored in the Deployment_Files folder. 마지막으로 스크립트는 리소스가 속한 리소스 그룹을 확인 하 고 DeployResourceGroups.ps1 스크립트를 확인 하 여 해당 리소스 그룹을 배포 하는 배포 코드가 이미 있는지 확인 합니다.Lastly the script determines the resource group to which the resource belongs and checks the DeployResourceGroups.ps1 script to see if the deployment code to deploy that resource group already exists. 그렇지 않으면 해당 스크립트에 해당 스크립트를 추가 하 여 리소스 그룹을 배포 하는 경우 아무 작업도 수행 하지 않습니다.If it does not, then it will add code to that script to deploy the resource group, if it does then it does nothing.

동적 API 검색Dynamic API retrieval

이 도구는 원본 구독에서 사용할 수 있는 최신 리소스 공급자 API 버전을 사용 하 여 대상 구독에 리소스를 배포할 수 있도록 기본적으로 제공 되는 동적 API 검색을 제공 합니다.The tool has dynamic API retrieval built in so that the newest resource provider API version available in the source subscription is used to deploy the resources in the target subscription:

그림 API 검색

resource_processor.ps1 에서 API 검색을 검색 합니다.Figure API retrieval in resource_processor.ps1.

그러나 대상 구독의 리소스 공급자 API 버전이 원본 구독에서 제공 되는 것 보다 오래 되어 원본 구독에서 제공 되는 버전을 지원 하지 않을 수 있습니다.However, there is the chance that the target subscription’s resource provider API version is older than the source subscription’s and does not support the version being provided from the source subscription. 이 경우 배포가 실행 될 때 오류가 throw 됩니다.In this case, an error will be thrown when the deployment is run. 이 문제를 해결 하려면 대상 구독의 리소스 공급자를 원본 구독의 리소스 공급자와 일치 하도록 업데이트 합니다.To resolve this, update the resource providers in the target subscription to match those in the source subscription.

병렬 배포Parallel deployments

이 도구에는 parallel 이라는 매개 변수가 필요 합니다.The tool requires a parameter named parallel. 이 매개 변수는 검색 된 리소스를 병렬로 배포할지 여부를 지정 하는 부울 값을 사용 합니다.This parameter takes a boolean value specifying whether or not the retrieved resources should be deployed in parallel or not. 값이 true 로 설정 된 경우 AzResourceGroupDeployment 에 대 한 각 호출에는 -asJob 플래그가 있으며 병렬 작업이 완료 될 때까지 대기 하는 코드 블록이 리소스 형식에 따라 리소스 배포 집합 간에 추가 됩니다.If the value is set to true, then each call to New-AzResourceGroupDeployment will have the -asJob flag and blocks of code to wait for parallel jobs to finish will be added in between sets of resource deployments based on the resource types. 다음 유형의 리소스를 배포 하기 전에 한 유형의 모든 리소스가 모두 배포 되었는지 확인 합니다.It ensures that all resources of one type have all been deployed prior to deploying the next type of resource. Parallel 매개 변수 값이 false 로 설정 된 경우 리소스는 모두 순차적으로 배포 됩니다.If the parallel parameter value is set to false, the resources will all be deployed in serial.

리소스 종류 추가Add additional resource types

새 리소스 형식을 추가 하는 것은 간단 합니다.Adding new resource types is simple. 개발자는 사용자 지정 된 프로세서와 Azure Resource Manager 템플릿 또는 Azure Resource Manager 템플릿 생성기를 만들어야 합니다.The developer must create a customized processor and either an Azure Resource Manager template or an Azure Resource Manager template generator. 이 작업이 완료 되 면 개발자는 $resourceType 매개 변수에 대 한 리소스 종류와 resource_retriever.ps1의 $resourceTypes 배열을 ValidateSet에 추가 해야 합니다.After that is complete the developer must add the resource type to the ValidateSet for the $resourceType parameter and the $resourceTypes array in resource_retriever.ps1. $ResourceTypes 배열에 리소스 종류를 추가 하는 경우 올바른 순서로 추가 해야 합니다.When adding the resource type to the $resourceTypes array, it must be added in the correct order. 배열의 순서는 리소스가 배포 되는 순서를 결정 하므로 종속성을 염두에 두어야 합니다.The order of the array determines the order that resources will be deployed, so keep dependencies in mind. 마지막으로, 사용자 지정 된 프로세서가 Azure Resource Manager 템플릿 생성기를 활용 하는 경우 post_process.ps1$customTypes 배열에 리소스 형식 이름을 추가 해야 합니다.Lastly, if the customized processor utilizes an Azure Resource Manager template generator, they must add the resource type name to the $customTypes array in post_process.ps1.

Azure 구독 복제기 실행Run Azure subscription replicator

Azure 구독 복제기 (v3) 도구를 실행 하려면 모든 매개 변수를 제공 하 resource_retriever.ps1를 시작 해야 합니다.To run the Azure subscription replicator (v3) tool you’ll need to kick off resource_retriever.ps1, supplying all of the parameters. ResourceType 매개 변수는 리소스 종류가 아닌 모든 항목을 선택 하는 옵션이 있습니다.The resourceType parameter, there is an option to choose All rather than one resource type. 모두 를 선택 하는 경우 배포를 실행할 때 종속 리소스가 먼저 배포 되도록 resource_retriever.ps1는 모든 리소스를 순서 대로 처리 합니다.If All is selected, resource_retriever.ps1 will process all the resources in an order so that when the deployment is run, dependent resources are deployed first. 예를 들어 가상 머신을 제대로 배포 하기 위해 VNet을 준비 해야 하기 때문에 가상 머신 이전에 Vnet가 배포 됩니다.For example, VNets are deployed prior to virtual machines as virtual machines require a VNet to be in place for them to be deployed properly.

스크립트의 실행이 완료 되 면 Deployment_Files, Parameter_FilesCustom_ARM_Templates 라는 새 폴더가 만들어집니다.When the script is finished executing, there will be three new folders, Deployment_Files, Parameter_Files, and Custom_ARM_Templates.

참고

생성 된 스크립트를 실행 하기 전에 올바른 환경을 설정 하 고 대상 구독 (예: 새 Azure Stack 허브)에 로그인 한 다음 작업 디렉터리를 Deployment_Files 폴더로 설정 해야 합니다.Before you run any of the generated scripts, you must set the right environment and login to the target subscription (in the new Azure Stack Hub for ex) and set the working directory to the Deployment_Files folder.

Deployment_Files에는 DeployResourceGroups.ps1DeployResources.ps1 라는 두 개의 파일이 저장 됩니다.Deployment_Files will hold two files DeployResourceGroups.ps1 and DeployResources.ps1. DeployResourceGroups.ps1를 실행 하면 리소스 그룹이 배포 됩니다.Executing DeployResourceGroups.ps1 will deploy the resource groups. DeployResources.ps1를 실행 하면 처리 된 모든 리소스가 배포 됩니다.Executing DeployResources.ps1 will deploy all of the resources that were processed. 도구를 리소스 DeployResources.ps1 종류로 all 또는 virtualMachines/ 으로 실행 한 경우에는 모든 가상 컴퓨터를 만드는 데 사용할 가상 컴퓨터 관리자 암호를 입력 하 라는 메시지가 사용자에 게 표시 됩니다.In the case that the tool was executed with All or Microsoft.Compute/virtualMachines as the resource type, DeployResources.ps1 will prompt the user to input a virtual machine admin password that will be used to create all of the virtual machines.

예제Example

  1. 스크립트를 실행합니다.Run the script.

    스크립트 실행

    참고

    PS 인스턴스에 대해 원본 않고도 및 구독 컨텍스트를 구성 해야 합니다.Don't forget to configure the source evironment and the subscription context for the PS instance.

  2. 새로 만든 폴더를 검토 합니다.Review the newly created folders:

    폴더 검토

  3. 컨텍스트를 대상 구독으로 설정 하 고, Deployment_Files 으로 폴더를 변경 하 고, 리소스 그룹 (DeployResourceGroups.ps1 스크립트 실행)을 배포한 후 리소스 배포를 시작 합니다 (DeployResources.ps1 스크립트 실행).Set the context to the target subscription, change the folder to Deployment_Files, deploy the resource groups (run the DeployResourceGroups.ps1 script), and then start the resource deployment (run the DeployResources.ps1 script).

    배포 구성 및 시작

  4. Get-Job을 실행 하 여 상태를 확인 합니다.Run Get-Job to check the status. Get-Job | Receive-Job은 결과를 반환 합니다.Get-Job | Receive-Job will return the results.

정리Clean up

ReplicatorV3 폴더 내에 cleanup_generated_items.ps1 이라는 파일이 있습니다 .이 파일은 Deployment_Files, Parameter_Files, Custom_ARM_Templates 폴더 및 모든 내용을 제거 합니다.Inside the replicatorV3 folder, there is a file named cleanup_generated_items.ps1 - it will remove the Deployment_Files, Parameter_Files, and Custom_ARM_Templates folders and all of their contents.

구독 복제기 작업Subscription replicator operations

Azure 구독 복제기 (v3)는 현재 다음 리소스 종류를 복제할 수 있습니다.The Azure subscription replicator (v3) can currently replicate the following resource types:

  • Microsoft.Compute/availabilitySetsMicrosoft.Compute/availabilitySets

  • Microsoft.Compute/virtualMachinesMicrosoft.Compute/virtualMachines

  • Microsoft.Network/loadBalancersMicrosoft.Network/loadBalancers

  • Microsoft.Network/networkSecurityGroupsMicrosoft.Network/networkSecurityGroups

  • Microsoft.Network/publicIPAddressesMicrosoft.Network/publicIPAddresses

  • Microsoft.Network/routeTablesMicrosoft.Network/routeTables

  • Microsoft.Network/virtualNetworksMicrosoft.Network/virtualNetworks

  • Microsoft.Network/virtualNetworkGatewaysMicrosoft.Network/virtualNetworkGateways

  • Microsoft.Storage/storageAccountsMicrosoft.Storage/storageAccounts

모든 리소스 유형으로 도구를 실행 하는 경우 복제 및 배포할 때 다음 순서를 따릅니다 (아래에서 모든 리소스에는 해당 구성이 복제 되 고 (sku, 제안 등).).When running the tool with All as the resource type, the following order will be followed when replicating and deploying (in the below, all resources have their configuration replicated, i.e. sku, offer, etc.):

  • Microsoft.Network/virtualNetworksMicrosoft.Network/virtualNetworks

    • 복제:-모든 주소 공간-모든 서브넷Replicates: - All address spaces - All subnets
  • Microsoft.Network/virtualNetworkGatewaysMicrosoft.Network/virtualNetworkGateways

    • 복제:-공용 IP 구성-서브넷 구성-VPN 유형-게이트웨이 유형Replicates: - Public IP configuration - Subnet configuration - VPN type - Gateway type
  • Microsoft.Network/routeTablesMicrosoft.Network/routeTables

  • Microsoft.Network/networkSecurityGroupsMicrosoft.Network/networkSecurityGroups

    • 복제:-모든 보안 규칙 인바운드 및 아웃 바운드Replicates: - All security rules inbound and outbound
  • Microsoft.Network/publicIPAddressesMicrosoft.Network/publicIPAddresses

  • Microsoft.Network/loadBalancersMicrosoft.Network/loadBalancers

    • 복제:-개인 IP 주소-공용 IP 주소 구성-서브넷 구성Replicates: - Private IP addresses - Public IP address configuration - Subnet configuration
  • Microsoft.Compute/availabilitySetsMicrosoft.Compute/availabilitySets

    • 복제:-장애 도메인 수-업데이트 도메인 수Replicates: - Number of fault domains - Number of update domains
  • Microsoft.Storage/storageAccountsMicrosoft.Storage/storageAccounts

  • Microsoft.Compute/virtualMachinesMicrosoft.Compute/virtualMachines

    • 복제Replicates:
      -데이터 디스크 (데이터 없음)- Data disks (without data)
      -가상 컴퓨터 크기- Virtual machine size
      -운영 체제- Operating system
      -진단 저장소 계정 구성- Diagnostic storage account configuration
      -공용 IP 구성- Public IP configuration
      -네트워크 인터페이스- Network Interface
      -네트워크 인터페이스 개인 IP 주소- Network Interface private IP address
      -네트워크 보안 그룹 구성- Network Security Group configuration
      -가용성 집합 구성- Availability set configuration

참고

OS 디스크 및 데이터 디스크에 대 한 관리 디스크만 만듭니다.Only creates managed disks for OS disk and data disks. 현재 저장소 계정 사용에 대 한 지원이 없습니다.Currently, there isn't support for using storage accounts

제한 사항Limitations

대상 구독의 리소스 공급자가 원본 구독에서 복제 되는 모든 리소스 및 옵션을 지 원하는 한, 도구는 한 구독에서 다른 구독으로 리소스를 복제할 수 있습니다.The tool can replicate resources from one subscription to another as long as the target subscription’s resource providers support all of the resources and options that are being replicated from the source subscription.

성공적인 복제를 위해 대상 구독의 리소스 공급자 버전이 원본 구독과 일치 하는지 mare 합니다.To ensure successful replication, mare sure that the target subscription’s resource provider versions match those of the source subscription.

상용 Azure에서 상용 Azure로 또는 Azure Stack Hub 내에서 동일한 Azure Stack 허브 내의 다른 구독으로 복제 하는 경우 저장소 계정을 복제할 때 문제가 발생 합니다.When replicating from commercial Azure to commercial Azure or from one subscription within Azure Stack Hub to another subscription within the same Azure Stack Hub, there will be issues when replicating storage accounts. 이는 저장소 계정 명명 요구 사항으로 인해 모든 저장소 계정 이름이 모든 상용 Azure에서 고유 하거나 Azure Stack 허브 지역/인스턴스의 모든 구독에서 고유 해야 하기 때문입니다.This is due to the storage account naming requirement that all storage account names be unique across all of commercial Azure or across all subscriptions on an Azure Stack Hub region/instance. 여러 Azure Stack 허브 인스턴스에서 저장소 계정을 복제 하는 것은 스택이 별도의 지역/인스턴스 이기 때문에 성공 합니다.Replicating storage accounts across different Azure Stack Hub instances will succeed as the Stacks are separate regions/instances.

다음 단계Next steps

Azure Stack 허브 네트워킹의 차이점 및 고려 사항Differences and considerations for Azure Stack Hub networking