Replicar recursos usando o replicador de subscrição Azure Stack HubReplicate resources using the Azure Stack Hub subscription replicator

Pode utilizar o replicador de subscrição powerShell do Azure Stack Hub para copiar os recursos entre as subscrições do Azure Stack Hub, através dos selos Azure Stack Hub, ou entre o Azure Stack Hub e o Azure.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. O script do replicador lê e reconstrói os recursos do Azure Resource Manager de diferentes subscrições do Azure e do Azure Stack Hub.The replicator script reads and rebuilds the Azure Resource Manager resources from different Azure and Azure Stack Hub subscriptions. Este artigo analisa como o script funciona, como pode usar o script, e fornece uma referência para as operações do script.This article looks at how the script works, how you can use the script, and provides a reference for script operations.

Pode encontrar os scripts utilizados neste artigo no repositório GitHub dos Padrões inteligentes de borda Azure.You can find the scripts used in this article in the Azure Intelligent Edge Patterns GitHub repository. Os scripts estão na pasta do replicador de subscrição.The scripts are in the subscription replicator folder.

Visão geral do replicador de assinaturaSubscription replicator overview

O replicador de assinaturas Azure foi concebido para ser modular.The Azure subscription replicator was designed to be modular. Esta ferramenta utiliza um processador central que orquestra a replicação de recursos.This tool uses a core processor that orchestrates the resource replication. Além disso, a ferramenta suporta processadores personalizáveis que atuam como modelos para copiar diferentes tipos de recursos.In addition, the tool supports customizable processors that act as templates for copying different types of resources.

O processador principal é composto pelos seguintes três scripts:The core processor is made up of the following three scripts:

  • resource_retriever.ps1resource_retriever.ps1

    • Gera pastas para armazenar ficheiros de saída.Generates folders to store output files.

    • Define o contexto da subscrição de origem.Sets context to the source subscription.

    • Recupera os recursos e passa-os para resource_processor.ps1.Retrieves the resources and passes them along to resource_processor.ps1.

  • resource_processor.ps1resource_processor.ps1

    • Processa o recurso transmitido por resource_retriever.ps1.Processes the resource passed in by resource_retriever.ps1.

    • Determina qual processador personalizado para usar e passa os recursos.Determines which customized processor to use and passes the resources.

  • post_process.ps1post_process.ps1

    • Post processa a saída gerada pelo processador personalizado para prepará-la para ser implementada na subscrição-alvo.Post processes the output generated by the customized processor to prepare it to be deployed in the target subscription.

    • Gera código de implantação para implantar os recursos na subscrição-alvo.Generates deployment code to deploy the resources in the target subscription.

Os três scripts controlam o fluxo de informação de uma forma padrão para permitir uma maior flexibilidade.The three scripts control the flow of information in a standard way to allow for greater flexibility. Adicionar suporte a recursos adicionais, por exemplo, não requer que altere qualquer código no processador principal.Adding support for additional resources, for example, doesn't require you to change any code in the core processor.

Processadores personalizados, que foram mencionados acima, são ps1 ficheiros que ditam como um determinado tipo de recurso deve ser processado.Customized processors, that were mentioned above, are ps1 files that dictate how a certain type of resource should be processed. O nome de um processador personalizado é sempre nomeado usando os dados do tipo num recurso.The name of a customized processor is always named using the type data in a resource. Por exemplo, assumindo $vm que detém um objeto de máquina virtual, em funcionamento $vm . Tipo iria produzir Microsoft.Compute/virtualMachines .For example, assuming $vm holds a virtual machine object, running $vm.Type would yield Microsoft.Compute/virtualMachines. Ou seja, um processador para uma máquina virtual seria nomeado virtualMachines_processor.ps1 , o nome deve ser exatamente como aparece nos metadados de recursos, pois é assim que o processador principal determina qual o processador personalizado a utilizar.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.

Um processador personalizado dita como um recurso deve ser replicado, determinando que informações são importantes e ditando como essa informação deve ser retirada dos metadados de recursos.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. O processador personalizado pega então em todos os dados extraídos e utiliza-os para gerar um ficheiro de parâmetros que será usado em conjunto com um modelo de Gestor de Recursos Azure para implementar o recurso na subscrição-alvo.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. Este ficheiro de parâmetros é armazenado no Parameter_Files depois de ser publicado por post_process.ps1.This parameters file is stored in the Parameter_Files after it is post processed by post_process.ps1.

Existe uma pasta na estrutura de ficheiros do Replicador chamada Standardized_ARM_Templates.There is a folder in the Replicator file structure named Standardized_ARM_Templates. Dependendo do ambiente de origem, as implementações utilizarão um destes modelos padronizados do Gestor de Recursos Azure, ou um modelo personalizado do Gestor de Recursos Azure terá de ser gerado.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. Neste caso, um processador personalizado deve chamar um gerador de modelos Azure Resource Manager.In this case, a customized processor must call an Azure Resource Manager template generator. No exemplo iniciado anteriormente, o nome de um gerador de modeloS Azure Resource Manager para máquinas virtuais seria nomeado 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. O gerador de modelos Azure Resource Manager é responsável pela criação de um modelo personalizado do Gestor de Recursos Azure com base nas informações que estão nos metadados de um recurso.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. Por exemplo, se o recurso de máquina virtual tiver metadados especificando que é membro de um conjunto de disponibilidade, o gerador de modelos Azure Resource Manager criará um modelo de Gestor de Recursos Azure com código que especifica o ID do conjunto de disponibilidade de que a máquina virtual faz parte.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. Desta forma, quando a máquina virtual é implantada na nova subscrição, é automaticamente adicionada à disponibilidade definida após a implementação.That way when the virtual machine is deployed to the new subscription it automatically gets added to the availability set upon deployment. Estes modelos personalizados do Azure Resource Manager são armazenados na pasta Custom_ARM_Templates localizada dentro da pasta Standardized_ARM_Templates.These customized Azure Resource Manager templates are stored in the Custom_ARM_Templates folder located inside the Standardized_ARM_Templates folder. O post_processor.ps1 é responsável por determinar se uma implementação deve usar um modelo de Gestor de Recursos Azure normalizado ou um personalizado e gerar o código de implementação correspondente.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.

O script post-process.ps1 é responsável pela limpeza dos ficheiros de parâmetros e pela criação dos scripts que o utilizador utilizará para implementar os novos recursos.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. Durante a fase de limpeza, o script substitui todas as referências ao ID de assinatura de origem, iD do inquilino e localização pelos valores-alvo correspondentes.During the cleaning phase, the script replaces all references to the source subscription ID, tenant ID, and location with the corresponding target values. Em seguida, coloca o ficheiro de parâmetros na pasta Parameter_Files.It then outputs the parameters file to the Parameter_Files folder. Em seguida, determina se o recurso que está a ser processado utiliza ou não um modelo personalizado do Gestor de Recursos Azure e gera o código de implementação correspondente, que utiliza o cmdlet New-AzResourceGroupDeployment.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. O código de implantação é então adicionado ao ficheiro denominado DeployResources.ps1 armazenado na pasta Deployment_Files.The deployment code is then added to file named DeployResources.ps1 stored in the Deployment_Files folder. Por último, o script determina o grupo de recursos a que pertence o recurso e verifica o DeployResourceGroups.ps1 script para ver se o código de implementação para implementar esse grupo de recursos já existe.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. Se não o fizer, adicionará código a esse script para implantar o grupo de recursos, se o fizer, então não faz nada.If it does not, then it will add code to that script to deploy the resource group, if it does then it does nothing.

Recuperação dinâmica da APIDynamic API retrieval

A ferramenta tem a recuperação dinâmica da API incorporada para que a mais recente versão API do fornecedor de recursos disponível na subscrição de origem seja usada para implementar os recursos na subscrição-alvo: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:

Recuperação de API de figura

Recolha de API em resource_processor.ps1.Figure API retrieval in resource_processor.ps1.

No entanto, existe a possibilidade de a versão API do fornecedor de recursos da subscrição-alvo ser mais antiga do que a da subscrição de origem e não suportar a versão fornecida a partir da subscrição de origem.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. Neste caso, será lançado um erro quando a colocação for executada.In this case, an error will be thrown when the deployment is run. Para resolver isto, atualize os fornecedores de recursos na subscrição-alvo para corresponder aos da subscrição de origem.To resolve this, update the resource providers in the target subscription to match those in the source subscription.

Implementações paralelasParallel deployments

A ferramenta requer um parâmetro chamado paralelo.The tool requires a parameter named parallel. Este parâmetro tem um valor booleano especificando se os recursos recuperados devem ou não ser implantados em paralelo.This parameter takes a boolean value specifying whether or not the retrieved resources should be deployed in parallel or not. Se o valor for definido como verdadeiro, então cada chamada para New-AzResourceGroupDeployment terá a bandeira e blocos de código -como o Presidente para aguardar que os trabalhos paralelos terminem serão adicionados entre conjuntos de implementações de recursos com base nos tipos de recursos.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. Garante que todos os recursos de um tipo foram todos implantados antes da implantação do próximo tipo de recurso.It ensures that all resources of one type have all been deployed prior to deploying the next type of resource. Se o valor do parâmetro paralelo for definido como falso, os recursos serão todos implantados em série.If the parallel parameter value is set to false , the resources will all be deployed in serial.

Adicionar tipos de recursos adicionaisAdd additional resource types

Adicionar novos tipos de recursos é simples.Adding new resource types is simple. O desenvolvedor deve criar um processador personalizado e um modelo de Gestor de Recursos Azure ou um gerador de modeloS Azure Resource Manager.The developer must create a customized processor and either an Azure Resource Manager template or an Azure Resource Manager template generator. Depois de concluído, o desenvolvedor deve adicionar o tipo de recurso ao Conjunto validado para o parâmetro $resourceType e a matriz $resourceTypes em resource_retriever.ps1.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. Ao adicionar o tipo de recurso à matriz $resourceTypes, deve ser adicionado na ordem correta.When adding the resource type to the $resourceTypes array, it must be added in the correct order. A ordem da matriz determina a ordem de que os recursos serão implantados, por isso tenha em mente as dependências.The order of the array determines the order that resources will be deployed, so keep dependencies in mind. Por último, se o processador personalizado utilizar um gerador de modeloS Azure Resource Manager, devem adicionar o nome do tipo de recurso à matriz $customTypes em post_process.ps1.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.

Executar o replicador de subscrição do AzureRun Azure subscription replicator

Para executar a ferramenta de replicador de subscrição Azure (v3) terá de iniciar resource_retriever.ps1, fornecendo todos os parâmetros.To run the Azure subscription replicator (v3) tool you’ll need to kick off resource_retriever.ps1, supplying all of the parameters. O parâmetro de recursosType, existe uma opção para escolher All em vez de um tipo de recurso.The resourceType parameter, there is an option to choose All rather than one resource type. Se Todos forem selecionados, resource_retriever.ps1 processará todos os recursos numa ordem para que, quando a implementação for executada, os recursos dependentes sejam implantados primeiro.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. Por exemplo, os VNets são implantados antes de máquinas virtuais, uma vez que as máquinas virtuais exigem que um VNet esteja no lugar para que sejam corretamente implantados.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.

Quando o guião terminar de ser executado, haverá três novas pastas, Deployment_Files, Parameter_Files e Custom_ARM_Templates.When the script is finished executing, there will be three new folders, Deployment_Files , Parameter_Files , and Custom_ARM_Templates.

Nota

Antes de executar qualquer um dos scripts gerados, deve definir o ambiente certo e iniciar sessão na subscrição-alvo (no novo Azure Stack Hub para ex) e definir o diretório de trabalho para a pasta 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 terá dois ficheiros DeployResourceGroups.ps1 e DeployResources.ps1.Deployment_Files will hold two files DeployResourceGroups.ps1 and DeployResources.ps1. Executar DeployResourceGroups.ps1 implementará os grupos de recursos.Executing DeployResourceGroups.ps1 will deploy the resource groups. Executar DeployResources.ps1 irá mobilizar todos os recursos que foram processados.Executing DeployResources.ps1 will deploy all of the resources that were processed. No caso de a ferramenta ter sido executada com a All ou Microsoft.Compute/virtualMachines como o tipo de recurso, DeployResources.ps1 irá levar o utilizador a inserir uma palavra-passe de administração de máquina virtual que será usada para criar todas as máquinas virtuais.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.

ExemploExample

  1. Execute o script.Run the script.

    Executar o script

    Nota

    Não se esqueça de configurar o evironment de origem e o contexto de subscrição para o caso PS.Don't forget to configure the source evironment and the subscription context for the PS instance.

  2. Reveja as pastas recém-criadas:Review the newly created folders:

    Reveja as pastas

  3. Desaprote o contexto para a subscrição-alvo, altere a pasta para Deployment_Files, implante os grupos de recursos (executar o script DeployResourceGroups.ps1) e, em seguida, inicie a implementação do recurso (executar o script 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).

    Configurar e iniciar a implantação

  4. Corra Get-Job para verificar o estado.Run Get-Job to check the status. Get-Job Receive-Job devolverão os resultados.Get-Job | Receive-Job will return the results.

LimpezaClean up

Dentro da pasta do replicadorV3, existe um ficheiro com o nome cleanup_generated_items.ps1 - que removerá o Deployment_Files , Parameter_Files – e Custom_ARM_Templates pastas e todo o seu conteúdo.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.

Operações de replicador de assinaturasSubscription replicator operations

O replicador de assinaturaS Azure (v3) pode atualmente replicar os seguintes tipos de recursos: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/storageAcontasMicrosoft.Storage/storageAccounts

Ao executar a ferramenta com All como tipo de recurso, a seguinte ordem será seguida ao replicar e implantar (no seguinte, todos os recursos têm a sua configuração replicada, ou seja, sku, oferta, etc.):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

    • Replicas: - Todos os espaços de endereço - Todas as sub-redesReplicates: - All address spaces - All subnets
  • Microsoft.Network/virtualNetworkGatewaysMicrosoft.Network/virtualNetworkGateways

    • Replicações: - Configuração IP pública - Configuração de sub-rede - tipo VPN - Tipo GatewayReplicates: - Public IP configuration - Subnet configuration - VPN type - Gateway type
  • Microsoft.Network/routeTablesMicrosoft.Network/routeTables

  • Microsoft.Network/networkSecurityGroupsMicrosoft.Network/networkSecurityGroups

    • Replicas: - Todas as regras de segurança de entrada e saídaReplicates: - All security rules inbound and outbound
  • Microsoft.Network/publicIPAddressesMicrosoft.Network/publicIPAddresses

  • Microsoft.Network/loadBalancersMicrosoft.Network/loadBalancers

    • Replicações: - Endereços IP privados - Configuração de endereço IP público - Configuração da sub-redeReplicates: - Private IP addresses - Public IP address configuration - Subnet configuration
  • Microsoft.Compute/availabilitySetsMicrosoft.Compute/availabilitySets

    • Replicações: - Número de domínios de avaria - Número de domínios de atualizaçãoReplicates: - Number of fault domains - Number of update domains
  • Microsoft.Storage/storageAcontasMicrosoft.Storage/storageAccounts

  • Microsoft.Compute/virtualMachinesMicrosoft.Compute/virtualMachines

    • Replica:Replicates:
      - Discos de dados (sem dados)- Data disks (without data)
      - Tamanho da máquina virtual- Virtual machine size
      - Sistema operativo- Operating system
      - Configuração da conta de armazenamento de diagnóstico- Diagnostic storage account configuration
      - Configuração IP pública- Public IP configuration
      - Interface de rede- Network Interface
      - Endereço IP privado interface de rede- Network Interface private IP address
      - Configuração do Grupo de Segurança de Rede- Network Security Group configuration
      - Configuração definida de disponibilidade- Availability set configuration

Nota

Apenas cria discos geridos para discos de sos e discos de dados.Only creates managed disks for OS disk and data disks. Atualmente, não há suporte para usar contas de armazenamentoCurrently, there isn't support for using storage accounts

LimitaçõesLimitations

A ferramenta pode replicar recursos de uma subscrição para outra, desde que os fornecedores de recursos da subscrição-alvo suportem todos os recursos e opções que estão a ser replicados a partir da subscrição de origem.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.

Para garantir uma replicação bem sucedida, mare certifique-se de que as versões do fornecedor de recursos da subscrição-alvo correspondem às da subscrição de origem.To ensure successful replication, mare sure that the target subscription’s resource provider versions match those of the source subscription.

Ao replicar do Azure comercial para o Azure comercial ou de uma subscrição dentro do Azure Stack Hub para outra subscrição dentro do mesmo Azure Stack Hub, haverá problemas na replicação de contas de armazenamento.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. Isto deve-se ao requisito de nomeação da conta de armazenamento de que todos os nomes de conta de armazenamento sejam únicos em todo o Azure comercial ou em todas as subscrições de uma região/instância do Azure Stack Hub.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. Replicar contas de armazenamento em diferentes instâncias do Azure Stack Hub terá sucesso, uma vez que as Stacks são regiões/instâncias separadas.Replicating storage accounts across different Azure Stack Hub instances will succeed as the Stacks are separate regions/instances.

Passos seguintesNext steps

Diferenças e considerações para a rede Azure Stack HubDifferences and considerations for Azure Stack Hub networking