Migrar uma máquina virtual de uma zona de disponibilidade Regional para Zonal usando o PowerShell e a CLI do Azure
Este artigo detalha o uso de cmdlets do Azure PowerShell e da CLI para mover VMs de instância única do Azure de zonas de disponibilidade regionais para zonais. Uma zona de disponibilidade é uma zona fisicamente separada em uma região do Azure. Use zonas de disponibilidade para proteger seus aplicativos e dados de uma improvável falha ou perda de um datacenter inteiro.
Para usar uma zona de disponibilidade, crie a máquina virtual em uma região do Azure com suporte.
Pré-requisitos
Verifique os seguintes requisitos antes de iniciar o processo de migração:
Requisito | Descrição |
---|---|
Permissões de assinatura | Verifique se você tem acesso de Proprietário na assinatura que contém os recursos que deseja mover. A identidade gerenciada precisa dessas permissões: – Permissão para gravar ou criar recursos na assinatura do usuário, disponível com a função de Colaborador. – Permissão para criar atribuições de função. Normalmente, disponível com as funções Proprietário ou Administrador de Acesso de Usuário ou com uma função personalizada que tenha a permissão de gravação ou atribuições de função Microsoft.Authorization atribuída. Essa permissão não será necessária, se a identidade gerenciada do recurso de compartilhamento de dados já tiver acesso concedida ao armazenamento de dados do Azure. Saiba mais sobre as funções do Azure. |
Suporte à VM | Examine as regiões com suporte. - Verifique as configurações de computação, armazenamento e rede compatíveis. |
Status de integridade da VM | As VMs que você deseja mover precisam estar em um estado íntegro antes de tentar a transferência de recursos zonal. Verifique se todas as reinicializações pendentes e atualizações obrigatórias estão concluídas e se a máquina virtual está funcionando e está em um estado íntegro antes de tentar a transferência de recursos zonal da VM. |
Examinar os requisitos do PowerShell e da CLI
A maioria das operações de transferência de recursos é a mesma para o portal do Microsoft Azure e para o PowerShell, com algumas exceções.
Operação | Portal | PowerShell/CLI |
---|---|---|
Criar uma coleção de transferência de recursos | Uma coleção de transferência de recursos (uma lista de todas as VMs regionais que você está movendo) é criada automaticamente. As permissões de identidade necessárias são atribuídas no back-end pelo portal. | Você pode usar cmdlets do PowerShell ou cmdlets da CLI para: – Atribuir uma identidade gerenciada à coleção. – Adicionar VMs regionais à coleção. |
Operações de transferência de recursos | Validar as etapas e validar as alterações de configuração do Usuário. Iniciar a transferência de recursos inicia o processo de transferência de recursos e cria uma cópia da VM de origem na zona de destino. Isso também finaliza a transferência de recursos da VM recém-criada na zona de destino. | Cmdlets do PowerShell ou cmdlets da CLI para: – Adicionar VMs regionais à coleção – Resolver dependências – Realizar a transferência de recursos. – Confirmar a transferência de recursos. |
Valores de exemplo
Estamos usando estes valores em nossos exemplos de script:
Configuração | Valor |
---|---|
ID da assinatura | id da assinatura |
Mover região | Leste dos EUA |
Grupo de recursos (contendo metadados para a coleção de transferência de recursos) | RegionToZone-DemoMCRG |
Nome da coleção de transferência de recursos | RegionToZone-DemoMC |
Local da coleção de transferência de recursos | eastus2euap |
IdentityType | SystemAssigned |
Nome da VM | demoVM-MoveResource |
Tipo de coleção de transferência de recursos | RegionToZone |
Entrar no Azure
Entre na sua assinatura do Azure com o comando Connect-AzAccount
e siga as instruções na tela.
Connect-AzAccount –Subscription "<subscription-id>"
Configurar a coleção de transferência de recursos
O objeto MoveCollection armazena metadados e informações de configuração sobre os recursos que você deseja transferir. Para configurar uma coleção de transferência de recursos, faça o seguinte:
- Crie um grupo de recursos para a coleção de transferência de recursos.
- Crie um provedor de serviço para a assinatura, de modo que o recurso MoveCollection possa ser criado.
- Crie o objeto MoveCollection com a identidade gerenciada. Para que o objeto MoveCollection acesse a assinatura na qual o serviço Resource Mover está localizado, ele precisa de uma identidade gerenciada atribuída pelo sistema (anteriormente conhecida como MSI (identidade de serviço gerenciada)) que seja confiável para a assinatura.
- Permita à identidade gerenciada acesso à assinatura do Resource Mover.
Criar o grupo de recursos
Use o cmdlet a seguir para criar um grupo de recursos para os metadados de coleção de transferência de recursos e informações de configuração com New-AzResourceGroup. Um grupo de recursos é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados.
New-AzResourceGroup -Name "RegionToZone-DemoMCRG" -Location "EastUS"
Saída:
A saída mostra que o disco gerenciado está na mesma região da disponibilidade da VM:
ResourceGroupName : RegionToZone-DemoMCRG
Location : eastus
ProvisioningState : Succeeded
Tags :
Name Value
======= ========
Created 20230908
ResourceId : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG
Registre o provedor de recursos
Registre o provedor de recursos Microsoft.Migrate para que o recurso MoveCollection possa ser criado, conforme demonstrado abaixo:
Register-AzResourceProvider -ProviderNamespace Microsoft.Migrate
Aguarde o registro:
While(((Get-AzResourceProvider -ProviderNamespace Microsoft.Migrate)| where {$_.RegistrationState -eq "Registered" -and $_.ResourceTypes.ResourceTypeName -eq "moveCollections"}|measure).Count -eq 0) { Start-Sleep -Seconds 5 Write-Output "Waiting for registration to complete." }
Criar um objeto MoveCollection
Crie um objeto MoveCollection e atribua uma identidade gerenciada a ele, da seguinte maneira:
New-AzResourceMoverMoveCollection -Name "RegionToZone-DemoMC" -ResourceGroupName "RegionToZone-DemoMCRG" -MoveRegion "eastus" -Location "eastus2euap" -IdentityType "SystemAssigned" -MoveType "RegionToZone"
Saída:
Etag Location Name
---- -------- ----
"3a00c441-0000-3400-0000-64fac1b30000" eastus2euap RegionToZone-DemoMC
Observação
Para transferência de recursos de regional a zonal, o parâmetro MoveType
deve ser definido como RegionToZone e o parâmetro MoveRegion
deve ser definido como o local onde os recursos em movimento zonal residem. Verifique se os parâmetros SourceRegion
e TargetRegion
não são necessários e devem ser definidos como nulos.
Permitir acesso à identidade gerenciada
Permita à identidade gerenciada acesso à assinatura do Resource Mover, conforme demonstrado a seguir. Você precisa ser o proprietário da assinatura.
Recupere detalhes de identidade do objeto MoveCollection.
$moveCollection = Get-AzResourceMoverMoveCollection -Name "RegionToZone-DemoMC" -ResourceGroupName "RegionToZone-DemoMCRG" $identityPrincipalId = $moveCollection.IdentityPrincipalId
Atribua as funções necessárias à identidade para que o Azure Resource Mover possa acessar a sua assinatura para ajudar a transferir recursos. Examine a lista de permissões necessárias para a movimentação.
New-AzRoleAssignment -ObjectId $identityPrincipalId -RoleDefinitionName Contributor -Scope "/subscriptions/<subscription-id>"" New-AzRoleAssignment -ObjectId $identityPrincipalId -RoleDefinitionName "User Access Administrator" -Scope "/subscriptions/<subscription-id>"
Adicionar VMs regionais à coleção de transferência de recursos
Recupere as IDs para os recursos de origem existentes que você deseja transferir. Crie o objeto de configurações de recurso de destino e adicione recursos à coleção de transferência de recursos.
Observação
Os recursos adicionados a uma coleção de transferência de recursos precisam estar na mesma assinatura, mas podem estar em grupos de recursos diferentes.
Crie um objeto de configuração de recurso de destino da seguinte maneira:
$targetResourceSettingsObj = New-Object Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings $targetResourceSettingsObj.ResourceType = "Microsoft.Compute/virtualMachines" $targetResourceSettingsObj.TargetResourceName = "RegionToZone-demoTargetVm" $targetResourceSettingsObj.TargetAvailabilityZone = "2"
Saída
ResourceType TargetResourceGroupName TargetResourceName TargetAvailabilitySetId TargetAvailabilityZone TargetVMSize UserManagedIdentity ------------ ----------------------- ------------------ ----------------------- ---------------------- ------------ ------------------- Microsoft.Compute/virtualMachines RegionToZone-demoTargetVm 2
Adicionar recursos
Add-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -SourceId "/subscriptions/<Subscription-id>/resourcegroups/PS-demo-RegionToZone-RG/providers/Microsoft.Compute/virtualMachines/RegionToZone-demoSourceVm" -Name "demoVM-MoveResource" -ResourceSetting $targetResourceSettingsObj
Saída
DependsOn : {} DependsOnOverride : {} ErrorsPropertiesCode : ErrorsPropertiesDetail : ErrorsPropertiesMessage : ErrorsPropertiesTarget : ExistingTargetId : Id : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/Re gionToZone-DemoMC/moveResources/demoVM-MoveResource IsResolveRequired : False JobStatusJobName : JobStatusJobProgress : MoveStatusErrorsPropertiesCode : DependencyComputationPending MoveStatusErrorsPropertiesDetail : {} MoveStatusErrorsPropertiesMessage : The dependency computation is not completed for resource - /subscriptions/<Subscription-id>/resourcegroups/PS-demo-R egionToZone-RG/providers/Microsoft.Compute/virtualMachines/RegionToZone-demoSourceVm'. Possible Causes: Dependency computation is pending for resource. Recommended Action: Validate dependencies to compute the dependencies. MoveStatusErrorsPropertiesTarget : MoveStatusMoveState : MovePending Name : demoVM-MoveResource ProvisioningState : Succeeded ResourceSetting : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings SourceId : /subscriptions/<Subscription-id>/resourcegroups/PS-demo-RegionToZone-RG/providers/Microsoft.Compute/virtualMachines/ RegionToZone-demoSourceVm SourceResourceSetting : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings SystemDataCreatedAt : 9/8/2023 6:48:11 AM SystemDataCreatedBy : xxxxx@microsoft.com SystemDataCreatedByType : User SystemDataLastModifiedAt : 9/8/2023 6:48:11 AM SystemDataLastModifiedBy : xxxxx@microsoft.com SystemDataLastModifiedByType : User TargetId : Type :
Modificar configurações
É possível modificar as configurações de destino durante a transferência de VMs do Azure e de recursos associados. É recomendável que você altere as configurações de destino apenas antes de validar a coleção de transferência de recursos.
As configurações que você pode modificar são:
- Configurações da máquina virtual: grupo de recursos, nome da VM, zona de disponibilidade da VM, SKU da VM, cofre de chaves da VM e conjunto de criptografia de disco.
- Configurações de recurso de rede: para adaptadores de rede, redes virtuais (VNets/) e grupos de segurança de rede/adaptadores de rede, você pode:
- Usar um recurso de rede existente na região de destino.
- Criar um recurso com um nome diferente.
- IP público/Load Balancer: SKU e zona
Modifique as configurações da seguinte maneira:
Recupere o recurso de transferência do qual você quer editar as propriedades. Por exemplo, para recuperar uma VM, execute:
$moveResourceObj = Get-AzResourceMoverMoveResource -MoveCollectionName " RegionToZone-DemoMCRG " -ResourceGroupName " RegionToZone-DemoMC " -Name "PSDemoVM"
Copie a configuração de recurso para um objeto de configuração de recurso de destino.
$TargetResourceSettingObj = $moveResourceObj.ResourceSetting
Defina o parâmetro no objeto de configuração de recurso de destino. Por exemplo, para alterar o nome da VM de destino:
$TargetResourceSettingObj.TargetResourceName="PSDemoVM-target"
Atualize as configurações de destino do recurso de transferência. Neste exemplo, mudamos o nome da VM de PSDemoVM para PSDemoVMTarget.
Update-AzResourceMoverMoveResource -ResourceGroupName " RegionToZone-DemoMCRG " -MoveCollectionName " RegionToZone-DemoMC -SourceId "/subscriptions/<Subscription-d>/resourceGroups/PSDemoRM/providers/Microsoft.Compute/virtualMachines/PSDemoVM" -Name "PSDemoVM" -ResourceSetting $TargetResourceSettingObj
Resolver dependências
Verifique se as VMs regionais que você adicionou têm dependências de outros recursos e adicione-os conforme necessário.
Resolva as dependências da seguinte maneira:
Resolve-AzResourceMoverMoveCollectionDependency -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC"
Saída (quando há dependências)
AdditionalInfo : Code : Detail : EndTime : EndTime : 9/8/2023 6:52:14 AM Id : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/operations/bc68354b-ec1f-44cb-92ab-fb3b4ad90229 Message : Name : bc68354b-ec1f-44cb-92ab-fb3b4ad90229 Property : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any StartTime : 9/8/2023 6:51:50 AM Status : Succeeded
Para obter uma lista de recursos adicionados à coleção de transferência de recursos:
$list = Get-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" $list.Name
Saída:
demoVM-MoveResource mr_regiontozone-demosourcevm661_d6f18900-3b87-4fb5-9bdf-12da2f9fb185 mr_regiontozone-demosourcevm-vnet_d8536bf5-2d5f-4778-9650-32d0570bc41a mr_regiontozone-demosourcevm-ip_6af03f1f-eae8-4541-83f5-97a2506cfc3e mr_regiontozone-demosourcevm-nsg_98d68420-d7ff-4e2d-b758-25a6df80fca7 mr_nrms-timkbo3hy3nnmregiontozone-demosourcevm-vnet_f474c880-4823-4ed3-b761-96df6500f6a3
Para remover recursos da coleção de recursos, siga estas instruções.
Validações de capacidade, cota e SKU de Zonas de Disponibilidade
O Azure fornece recomendações quando a Zona de Disponibilidade selecionada não tem a SKU da máquina virtual ou quando não há cota ou capacidade suficiente disponível. Aqui estão alguns exemplos dessas recomendações e as ações que devem ser executadas se a SKU da máquina virtual não estiver disponível.
SKU de VM não disponível
Quando o tamanho da máquina virtual de origem Standard_DC1ds_v3
não está disponível na zona de disponibilidade 1
selecionada.
Ação recomendada: escolha um tamanho de máquina virtual diferente na mesma zona de disponibilidade ou selecione outra zona de disponibilidade com tamanho de VM recomendado correspondente.
Recomendações:
- SKU: Standard_DC1ds_v3, Zonas: [ 2 ]
- SKU: Standard_DC2ds_v3, Zonas: [ 2 ]
- SKU: Standard_DC4ds_v3, Zonas: [ 2 ]
- SKU: Standard_DC1s_v3, Zonas: [ 2 ]
- SKU: Standard_D2ds_v5, Zonas: [ 2, 3 ]
- SKU: Standard_D2as_v4, Zonas: [ 1, 2, 3 ]
- SKU: Standard_D2s_v3, Zonas: [ 1, 2, 3 ]
- SKU: Standard_D2as_v5, Zonas: [ 1, 2, 3 ]
- SKU: Standard_D2s_v5, Zonas: [ 2, 3 ]
Recomendações de capacidade
Recomendações de capacidade para o tamanho Standard_DC1ds_v3
da máquina virtual de seleção atual na zona de disponibilidade 1
selecionada.
Ação recomendada: para aumentar a probabilidade de uma implantação bem-sucedida, o Azure identificou outros tamanhos e zonas de máquinas virtuais recomendados. Para implantar sem complicações, escolha um tamanho de VM diferente na mesma zona de disponibilidade ou em uma zona de disponibilidade diferente com o tamanho da máquina virtual correspondente.
Recomendações:
- SKU: Standard_DC1ds_v3, Zonas: [ 2 ]
- SKU: Standard_DC2ds_v3, Zonas: [ 2 ]
- SKU: Standard_DC4ds_v3, Zonas: [ 2 ]
- SKU: Standard_DC1s_v3, Zonas: [ 2 ]
- SKU: Standard_D2ds_v5, Zonas: [ 2, 3 ]
- SKU: Standard_D2as_v4, Zonas: [ 1, 2, 3 ]
- SKU: Standard_D2s_v3, Zonas: [ 1, 2, 3 ]
- SKU: Standard_D2as_v5, Zonas: [ 1, 2, 3 ]
- SKU: Standard_D2s_v5, Zonas: [ 2, 3 ]
Como abordar as recomendações
Para resolver as situações em que a SKU da VM não foi encontrada ou há um problema de capacidade, atualize o recurso de migração e execute a resolução novamente. Aqui está um exemplo de referência:
Atualize o objeto do recurso de movimentação de máquina virtual para uma nova Zona ou SKU de acordo com as recomendações.
$targetResourceSettingsObj.TargetVmSize = "Standard_DC1ds_v3" $targetResourceSettingsObj.TargetAvailabilityZone = "3"
Atualizar o recurso de movimentação de máquina virtual
Add-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -SourceId "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Compute/virtualMachines/vmtwo" -Name "demoVM-MoveResource2" -ResourceSetting $targetResourceSettingsObj
Executar a resolução novamente
Resolve-AzResourceMoverMoveCollectionDependency -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC"
Cota insuficiente
A máquina virtual selecionada não pode ser movida para a zona de disponibilidade devido à cota insuficiente.
Ação recomendada: cota suficiente encontrada. Consulte o link e entre em contato com o suporte.
Iniciar a transferência de recursos da VM
Invoke-AzResourceMoverInitiateMove -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -MoveResource $("demoVM-MoveResource") -MoveResourceInputType "MoveResourceId"
Saída
AdditionalInfo :
Code :
Detail :
EndTime : 9/8/2023 7:07:58 AM
Id : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/o
perations/d3e06ac3-a961-4045-8301-aee7f6911160
Message :
Name : d3e06ac3-a961-4045-8301-aee7f6911160
Property : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any
StartTime : 9/8/2023 7:01:31 AM
Status : Succeeded
Confirmar
Após a movimentação inicial, você precisa confirmar a movimentação ou descartá-la. Confirmar conclui a transferência para a região de destino.
Confirme a transferência da seguinte maneira:
Invoke-AzResourceMover-VMZonalMoveCommit -ResourceGroupName "RG-MoveCollection-demoRMS" -MoveCollectionName "PS-centralus-westcentralus-demoRMS" -MoveResource $('psdemovm111', 'PSDemoRM-vnet','PSDemoVM-nsg', ‘PSDemoVM’) -MoveResourceInputType "MoveResourceId"
Saída:
AdditionalInfo :
Code :
Detail :
EndTime : 9/22/2023 5:26:55 AM
Id : /subscriptions/e80eb9fa-c996-4435-aa32-5af6f3d3077c/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/operations/35dd1d93-ba70-4dc9-a17f-7d8ba48678d8
Message :
Name : 35dd1d93-ba70-4dc9-a17f-7d8ba48678d8
Property : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any
StartTime : 9/22/2023 5:26:54 AM
Status : Succeeded
Remover um recurso
Você pode remover um único recurso ou vários recursos de um MoveCollection
usando os seguintes cmdlets:
Obter uma lista dos recursos de movimentação que foram adicionados à coleção de transferência de recursos:
$list = Get-AzResourceMoverMoveResource -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>"
Remover os recursos de movimentação encontrados:
Invoke-AzResourceMoverBulkRemove -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>" -MoveResource $($list.Name)
Remover coleção de transferência de recursos:
Remove-AzResourceMoverMoveCollection -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>"
Observação
Se você observar problemas de autorização de identidades gerenciadas, habilite novamente o acesso às identidades gerenciadas seguindo estas etapas.
Excluir VMs regionais de origem
Depois de confirmar a movimentação e verificar se os recursos funcionam conforme o esperado na região de destino, você pode excluir cada recurso de origem usando:
Próximas etapas
Saiba como mover VMs do Azure de instância única de configuração regional para zonal por meio do portal.