Fazer backup e restaurar VMs do Azure usando o Azure PowerShell

Este artigo descreve como fazer backup e restaurar uma VM do Azure em um cofre dos Serviços de Recuperação do Backup do Azure usando cmdlets do PowerShell.

O Backup do Azure fornece backups independentes e isolados para proteger contra a destruição indesejada dos dados em suas VMs. Os backups são armazenados em um cofre dos Serviços de Recuperação com gerenciamento interno de pontos de recuperação. A configuração e o dimensionamento são simples, os backups são otimizados e você pode facilmente restaurar conforme necessário.

Antes de fazer backup (ou proteger) uma máquina virtual, você deverá atender aos pré-requisitos para preparar o ambiente para proteger suas VMs.

Antes de começar

  • Saiba mais sobre o cofre dos Serviços de Recuperação.
  • Examine a arquitetura do backup de VM do Azure, saiba mais sobre o processo de backup e examine o suporte, as limitações e os pré-requisitos.
  • Examine a hierarquia de objeto do PowerShell para os Serviços de Recuperação.

Hierarquia de objetos dos Serviços de Recuperação

A hierarquia de objetos está resumida no diagrama a seguir.

Disgram shows the Recovery Services object hierarchy.

Examine a referência do cmdletAz.RecoveryServices na biblioteca do Azure.

Configurar e registrar

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Para começar:

  1. Baixe a versão mais recente do PowerShell.

  2. Localize os cmdlets do PowerShell do Backup do Azure disponíveis digitando o seguinte comando:

    Get-Command *azrecoveryservices*
    

    Os aliases e os cmdlets do Azure Backup, do Azure Site Recovery e do cofre do Recovery Services são exibidos. A imagem a seguir é um exemplo do que você verá. Esta não é a lista completa dos cmdlets.

    Screenshot shows the list of Recovery Services.

  3. Entre em sua conta do Azure usando Connect-AzAccount. Esse cmdlet abre uma página da Web que solicita suas credenciais de conta:

    • Como alternativa, é possível incluir as credenciais de conta como um parâmetro no cmdlet Connect-AzAccount, usando o parâmetro -Credential.
    • Se você é um parceiro CSP trabalhando em nome de um locatário, especifique o cliente como um locatário usando a tenantID ou o nome de domínio primário do locatário. Por exemplo: Connect-AzAccount -Tenant "fabrikam.com"
  4. Associe a assinatura que deseja usar com a conta, uma vez que uma conta pode ter várias assinaturas:

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  5. Se você estiver usando o Backup do Azure pela primeira vez, use o cmdlet Register-AzResourceProvider para registrar o provedor do Serviço de Recuperação do Azure com a sua assinatura.

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  6. Você pode verificar se os provedores foram registrados com êxito usando os seguintes comandos:

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    

    Na saída do comando, o RegistrationState deve mudar para Registered. Caso contrário, basta executar novamente o cmdlet Register-AzResourceProvider .

Criar um cofre dos Serviços de Recuperação

As etapas a seguir orientarão você durante a criação de um cofre dos Serviços de Recuperação. Um cofre dos Serviços de Recuperação é diferente de um cofre de Backup.

  1. O cofre dos Serviços de Recuperação é um recurso do Resource Manager e, portanto, você precisará colocá-lo em um grupo de recursos. Você pode usar um grupo de recursos existente ou criar um grupo de recursos com o cmdlet New-AzResourceGroup . Ao criar um grupo de recursos, especifique o nome e o local para o grupo de recursos.

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. Use o cmdlet New-AzRecoveryServicesVault para criar um cofre dos Serviços de Recuperação. Lembre-se de especificar o mesmo local para o cofre usado para o grupo de recursos.

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. Especifique o tipo de redundância de armazenamento a usar. Você pode usar o LRS (armazenamento com redundância local), o GRS (armazenamento com redundância geográfica) ou o ZRS (armazenamento com redundância de zona). O exemplo a seguir mostra que a opção -BackupStorageRedundancy do testvault está definida como GeoRedundant.

    $vault1 = Get-AzRecoveryServicesVault -Name "testvault"
    Set-AzRecoveryServicesBackupProperty  -Vault $vault1 -BackupStorageRedundancy GeoRedundant
    

    Dica

    Muitos cmdlets do Backup do Azure exigem o objeto do cofre dos Serviços de Recuperação como entrada. Por esse motivo, é conveniente armazenar o objeto de backup do cofre dos Serviços de Recuperação em uma variável.

Exibir os cofres em uma assinatura

Para exibir todos os cofres da assinatura, use Get-AzRecoveryServicesVault:

Get-AzRecoveryServicesVault

A saída é semelhante ao exemplo a seguir, observe que o ResourceGroupName e o local associado são fornecidos.

Name              : Contoso-vault
ID                : /subscriptions/1234
Type              : Microsoft.RecoveryServices/vaults
Location          : WestUS
ResourceGroupName : Contoso-docs-rg
SubscriptionId    : 1234-567f-8910-abc
Properties        : Microsoft.Azure.Commands.RecoveryServices.ARSVaultProperties

Fazer backup de VMs do Azure

Use um cofre dos Serviços de Recuperação para proteger as máquinas virtuais. Antes de aplicar a proteção, defina o contexto de cofre (o tipo de dados protegidos no cofre) e verifique a política de proteção. A política de proteção é a agenda de quando o trabalho de backup é executado e de quanto tempo cada instantâneo de backup é mantido.

Definir o contexto de cofre

Antes de habilitar a proteção em uma VM, use Set-AzRecoveryServicesVaultContext para definir o contexto de cofre. Depois que o contexto de cofre é definido, ele se aplica a todos os cmdlets subsequentes. O exemplo a seguir define o contexto de cofre para o cofre, testvault.

Get-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "Contoso-docs-rg" | Set-AzRecoveryServicesVaultContext

Buscar a ID do cofre

Planejamos substituir a configuração de contexto do cofre de acordo com as diretrizes do Azure PowerShell. Em vez disso, você pode armazenar ou buscar a ID do cofre e passá-la para comandos relevantes. Portanto, se você não tiver definido o contexto do cofre ou quiser especificar o comando a ser executado para um determinado cofre, passe a ID do cofre como "-vaultID" para todo comando relevante, da seguinte maneira:

$targetVault = Get-AzRecoveryServicesVault -ResourceGroupName "Contoso-docs-rg" -Name "testvault"
$targetVault.ID

Ou

$targetVaultID = Get-AzRecoveryServicesVault -ResourceGroupName "Contoso-docs-rg" -Name "testvault" | select -ExpandProperty ID

Modificando configurações de replicação de armazenamento

Use o comando Set-AzRecoveryServicesBackupProperty para definir a configuração de replicação de armazenamento do cofre como LRS/GRS

Set-AzRecoveryServicesBackupProperty -Vault $targetVault -BackupStorageRedundancy GeoRedundant/LocallyRedundant

Observação

A Redundância do Armazenamento só poderá ser modificada se não houver itens de backup protegidos no cofre.

Crie uma política de proteção

Quando você cria um cofre dos Serviços de Recuperação, ele vem com proteção e políticas de retenção padrão. A política de proteção padrão dispara um trabalho de backup diariamente em um horário especificado. A política de retenção padrão retém o ponto de recuperação diário por 30 dias. Você pode usar a política padrão para proteger rapidamente sua VM e editá-la posteriormente com detalhes diferentes.

Use Get-AzRecoveryServicesBackupProtectionPolicy para visualizar as políticas de proteção disponíveis no cofre. Você pode usar este cmdlet para obter uma política específica ou para exibir as políticas associadas a um tipo de carga de trabalho. O exemplo a seguir obtém as políticas para o tipo de carga de trabalho, AzureVM.

Get-AzRecoveryServicesBackupProtectionPolicy -WorkloadType "AzureVM" -VaultId $targetVault.ID

A saída deverá ser semelhante ao seguinte exemplo:

Name                 WorkloadType       BackupManagementType BackupTime                DaysOfWeek
----                 ------------       -------------------- ----------                ----------
DefaultPolicy        AzureVM            AzureVM              4/14/2016 5:00:00 PM

Observação

O fuso horário do campo BackupTime no PowerShell é UTC. No entanto, quando o tempo de backup é mostrado no Portal do Azure, o horário é ajustado para seu fuso horário local.

Uma política de proteção de backup está associada a pelo menos uma política de retenção. Uma política de retenção define por quanto tempo um ponto de recuperação é mantido até ser excluído.

Por padrão, uma hora de início é definida no Objeto de Política de Agenda. Use o exemplo a seguir para alterar a hora de início para a hora desejada. A hora de início desejada também deve estar em UTC. O exemplo a seguir pressupõe que a hora de início desejada seja 01:00 AM UTC para backups diários.

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "AzureVM"
$UtcTime = Get-Date -Date "2019-03-20 01:00:00Z"
$UtcTime = $UtcTime.ToUniversalTime()
$schpol.ScheduleRunTimes[0] = $UtcTime

Importante

A hora de início só pode ser definida usando intervalos de 30 minutos. No exemplo acima, ela pode ser "01:00:00" ou "02:30:00". Mas não pode ser "01:15:00".

O exemplo a seguir armazena a política de agendamento e a política de retenção em variáveis. O exemplo usa essas variáveis para definir os parâmetros ao criar uma política de proteção, NewPolicy.

$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType "AzureVM"
New-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -WorkloadType "AzureVM" -RetentionPolicy $retPol -SchedulePolicy $schPol -VaultId $targetVault.ID

A saída deverá ser semelhante ao seguinte exemplo:

Name                 WorkloadType       BackupManagementType BackupTime                DaysOfWeek
----                 ------------       -------------------- ----------                ----------
NewPolicy           AzureVM            AzureVM              4/24/2016 1:30:00 AM

Habilitar proteção

Depois de definir a política de proteção, você deve habilitar a política para um item. Use Enable-AzRecoveryServicesBackupProtection para habilitar a proteção. Habilitar a proteção envolve dois objetos – o item e a política. Depois de a política ter sido associada ao cofre, o fluxo de trabalho de backup será disparado no momento definido no agendamento da política.

Importante

Ao usar o PowerShell para habilitar o backup para várias VMs de uma só vez, confirme que não há nenhuma única política com mais de 100 VMs associadas a ela. Essa é uma melhor prática recomendada. Atualmente, o cliente PowerShell não bloqueia explicitamente se há mais de 100 VMs, mas há planos de adicionar essa verificação no futuro.

Os exemplos a seguir permitem a proteção do item, V2VM, usando a política NewPolicy. Os exemplos diferem com base em se a VM está criptografada e em qual tipo de criptografia.

Para ativar a proteção em VMs do Gerenciador de Recursos não criptografadas:

$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Policy $pol -Name "V2VM" -ResourceGroupName "RGName1" -VaultId $targetVault.ID

Para habilitar a proteção em VMs criptografadas (criptografadas usando BEK e KEK), você deve conceder a permissão de serviço de Backup do Azure para ler as chaves e segredos do Cofre de chaves.

Set-AzKeyVaultAccessPolicy -VaultName "KeyVaultName" -ResourceGroupName "RGNameOfKeyVault" -PermissionsToKeys backup,get,list -PermissionsToSecrets get,list -ServicePrincipalName 262044b1-e2ce-469f-a196-69ab7ada62d3
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Policy $pol -Name "V2VM" -ResourceGroupName "RGName1" -VaultId $targetVault.ID

Para habilitar a proteção em VMs criptografadas (criptografadas usando apenas BEK), você deve conceder a permissão de serviço de Backup do Azure para ler segredos do Cofre de chaves.

Set-AzKeyVaultAccessPolicy -VaultName "KeyVaultName" -ResourceGroupName "RGNameOfKeyVault" -PermissionsToSecrets backup,get,list -ServicePrincipalName 262044b1-e2ce-469f-a196-69ab7ada62d3
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Policy $pol -Name "V2VM" -ResourceGroupName "RGName1" -VaultId $targetVault.ID

Observação

Se você estiver usando a nuvem do Azure Governamental, use o valor ff281ffe-705c-4f53-9f37-a40e6f2c68f3 para o parâmetro ServicePrincipalName no cmdlet Set-AzKeyVaultAccessPolicy.

Se você quiser fazer o backup seletivo de alguns discos e excluir outros, conforme mencionado nesses cenários, pode configurar a proteção e fazer backup somente dos discos relevantes, conforme documentado aqui.

Monitoramento de um trabalho de backup

Você pode monitorar operações de longa duração, como trabalhos de backup, sem usar o Portal do Azure. Para obter o status de um trabalho em andamento, use o cmdlet Get-AzRecoveryservicesBackupJob. Esse cmdlet obtém os trabalhos de backup para um cofre específico, o qual está especificado no contexto de cofre. O exemplo a seguir obtém o status de um trabalho em andamento como uma matriz e armazena o status na variável $joblist.

$joblist = Get-AzRecoveryservicesBackupJob –Status "InProgress" -VaultId $targetVault.ID
$joblist[0]

A saída deverá ser semelhante ao seguinte exemplo:

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   ----------
V2VM             Backup               InProgress            4/23/2016                5:00:30 PM                cf4b3ef5-2fac-4c8e-a215-d2eba4124f27

Em vez de sondar esses trabalhos para conclusão (o que é um código adicional desnecessário), é mais simples usar o cmdlet Wait-AzRecoveryServicesBackupJob. Esse cmdlet pausa a execução até que o trabalho seja concluído ou o valor de tempo limite especificado seja atingido.

Wait-AzRecoveryServicesBackupJob -Job $joblist[0] -Timeout 43200 -VaultId $targetVault.ID

Gerenciar backups de VM do Azure

Modificar uma política de proteção

Para modificar a política de proteção, use Set-AzRecoveryServicesBackupProtectionPolicy para modificar os objetos SchedulePolicy ou RetentionPolicy.

Modificando a hora agendada

Quando você cria uma política de proteção, ela recebe uma hora de início padrão. Os exemplos a seguir mostram como modificar a hora de início de uma política de proteção.

$SchPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "AzureVM"
$UtcTime = Get-Date -Date "2019-03-20 01:00:00Z" (This is the time that you want to start the backup)
$UtcTime = $UtcTime.ToUniversalTime()
$SchPol.ScheduleRunTimes[0] = $UtcTime
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Set-AzRecoveryServicesBackupProtectionPolicy -Policy $pol  -SchedulePolicy $SchPol -VaultId $targetVault.ID

Modificando a retenção

O exemplo a seguir altera retenção de ponto de recuperação para 365 dias.

$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType "AzureVM"
$retPol.DailySchedule.DurationCountInDays = 365
$pol = Get-AzRecoveryServicesBackupProtectionPolicy -Name "NewPolicy" -VaultId $targetVault.ID
Set-AzRecoveryServicesBackupProtectionPolicy -Policy $pol  -RetentionPolicy $RetPol -VaultId $targetVault.ID

Configurando a retenção de instantâneo da restauração instantânea

Observação

Do Azure PowerShell versão 1.6.0 em diante, é possível atualizar o período de retenção do instantâneo da restauração instantânea na política usando o PowerShell.

$bkpPol = Get-AzRecoveryServicesBackupProtectionPolicy -WorkloadType "AzureVM" -VaultId $targetVault.ID
$bkpPol.SnapshotRetentionInDays=7
Set-AzRecoveryServicesBackupProtectionPolicy -policy $bkpPol -VaultId $targetVault.ID

O valor padrão será 2. Você pode definir o valor como no mínimo de 1 e no máximo de 5. Para políticas de backup semanais, o período é definido como 5 e não pode ser alterado.

Criando o grupo de recursos do Backup do Azure durante a retenção de instantâneo

Observação

Do Azure PowerShell versão 3.7.0 em diante, é possível criar e editar o grupo de recursos gerado para armazenar instantâneos.

Para saber mais sobre as regras de criação do grupo de recursos e outros detalhes relevantes, consulte a documentação grupo de recursos do Backup do Azure para máquinas virtuais.

$bkpPol = Get-AzureRmRecoveryServicesBackupProtectionPolicy -name "DefaultPolicyForVMs"
$bkpPol.AzureBackupRGName="Contosto_"
$bkpPol.AzureBackupRGNameSuffix="ForVMs"
Set-AzureRmRecoveryServicesBackupProtectionPolicy -policy $bkpPol

Excluir discos de uma VM protegida

O Backup de VM do Azure oferece um recurso para excluir ou incluir de forma seletiva discos que são úteis nesses cenários. Se a máquina virtual já estiver protegida pelo Backup de VM do Azure e se for feito o backup de todos os discos, você poderá modificar a proteção para incluir ou excluir seletivamente os discos, conforme mencionado aqui.

Disparar um backup

Use Backup-AzRecoveryServicesBackupItem para disparar um trabalho de backup. Se for o backup inicial, ele é um backup completo. Os backups posteriores fazem uma cópia incremental. O exemplo a seguir usa um backup de VM para ser retido por 60 dias.

$namedContainer = Get-AzRecoveryServicesBackupContainer -ContainerType "AzureVM" -Status "Registered" -FriendlyName "V2VM" -VaultId $targetVault.ID
$item = Get-AzRecoveryServicesBackupItem -Container $namedContainer -WorkloadType "AzureVM" -VaultId $targetVault.ID
$endDate = (Get-Date).AddDays(60).ToUniversalTime()
$job = Backup-AzRecoveryServicesBackupItem -Item $item -VaultId $targetVault.ID -ExpiryDateTimeUTC $endDate

A saída deverá ser semelhante ao seguinte exemplo:

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   ----------
V2VM              Backup              InProgress          4/23/2016                  5:00:30 PM                cf4b3ef5-2fac-4c8e-a215-d2eba4124f27

Observação

O fuso horário dos campos StartTime e EndTime mostrado no PowerShell é UTC. No entanto, quando a hora é exibida no Portal do Azure, ela é ajustada para seu fuso horário local.

Alterar política para itens de backup

Você pode modificar a política existente ou alterar a política do item submetido a backup de Policy1 para Policy2. Para alternar políticas de um item submetido a backup, busque a política relevante e faça o backup do item e use o comando Enable-AzRecoveryServices com o item como o parâmetro.

$TargetPol1 = Get-AzRecoveryServicesBackupProtectionPolicy -Name <PolicyName> -VaultId $targetVault.ID
$anotherBkpItem = Get-AzRecoveryServicesBackupItem -WorkloadType AzureVM -BackupManagementType AzureVM -Name "<BackupItemName>" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Item $anotherBkpItem -Policy $TargetPol1 -VaultId $targetVault.ID

O comando aguarda até que o backup de configuração seja concluído e retorna a saída a seguir.

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
TestVM           ConfigureBackup      Completed            3/18/2019 8:00:21 PM      3/18/2019 8:02:16 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

Parar a proteção

Reter dados

Se quiser interromper a proteção, use o cmdlet Disable-AzRecoveryServicesBackupProtection do PowerShell. Isso interromperá os backups agendados, mas os dados armazenados em backup até o momento serão mantidos para sempre.

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM -Name "<backup item name>" -VaultId $targetVault.ID
Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $targetVault.ID

Retomar backup

Se a proteção for interrompida e os dados de backup forem mantidos, você poderá retomar a proteção mais uma vez. Você precisa atribuir uma política para a proteção renovada. O cmdlet é o mesmo da política de alteração de itens de backup.

$TargetPol1 = Get-AzRecoveryServicesBackupProtectionPolicy -Name <PolicyName> -VaultId $targetVault.ID
$anotherBkpItem = Get-AzRecoveryServicesBackupItem -WorkloadType AzureVM -BackupManagementType AzureVM -Name "<BackupItemName>" -VaultId $targetVault.ID
Enable-AzRecoveryServicesBackupProtection -Item $anotherBkpItem -Policy $TargetPol1 -VaultId $targetVault.ID

Excluir dados de backup

Para remover completamente os dados armazenados em backup no cofre, adicione o sinalizador '-RemoveRecoveryPoints'/alterne para o comando de proteção 'disable'.

Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $targetVault.ID -RemoveRecoveryPoints

Restaurar uma VM do Azure

Há uma diferença importante entre a restaurar uma VM usando o portal do Azure e restaurar uma VM usando o PowerShell. Com o PowerShell, a operação de restauração é concluída quando são criadas as informações dos discos e de configuração do ponto de recuperação. A operação de restauração não cria a máquina virtual. Para criar uma máquina virtual com base no disco, consulte a seção Criar a VM com base em discos restaurados. Se você não quiser restaurar toda a VM, mas deseja restaurar ou recuperar alguns arquivos de um backup de VM do Azure, consulte a seção de recuperação de arquivo.

Dica

A operação de restauração não cria a máquina virtual.

O seguinte gráfico mostra a hierarquia de objetos de RecoveryServicesVault até BackupRecoveryPoint.

Screenshot shows the BackupContainer listed by Recovery Services object hierarchy.

Para restaurar dados de backup, identifique o item de backup e o ponto de recuperação que mantém os dados pontuais. Use Restore-AzRecoveryServicesBackupItem para restaurar dados do cofre para sua conta.

As etapas básicas para restaurar uma VM do Azure são:

  • Selecione a VM.
  • Escolha um ponto de recuperação.
  • Restaure os discos.
  • Crie a VM de discos armazenados.

Agora, você também pode usar o PowerShell para restaurar diretamente o conteúdo de backup em uma VM (original/nova), sem executar as etapas acima separadamente. Para obter mais informações, confira Restaurar dados na máquina virtual usando o PowerShell.

Selecionar a VM (ao restaurar arquivos)

Para obter o objeto do PowerShell que identifica o item correto de backup, comece do contêiner no cofre e desça progressivamente na hierarquia de objetos. Para selecionar o contêiner que representa a VM, use o cmdlet Get-AzRecoveryServicesBackupContainer e o redirecione para o cmdlet Get-AzRecoveryServicesBackupItem.

$namedContainer = Get-AzRecoveryServicesBackupContainer  -ContainerType "AzureVM" -Status "Registered" -FriendlyName "V2VM" -VaultId $targetVault.ID
$backupitem = Get-AzRecoveryServicesBackupItem -Container $namedContainer  -WorkloadType "AzureVM" -VaultId $targetVault.ID

Escolher um ponto de recuperação (ao restaurar arquivos)

Use o cmdlet Get-AzRecoveryServicesBackupRecoveryPoint para listar todos os pontos de recuperação para o item de backup. Em seguida, escolha o ponto de recuperação a ser restaurado. Se você não tiver certeza de qual ponto de recuperação será usado, é uma boa prática escolher o mais recente ponto RecoveryPointType = AppConsistent mais recente na lista.

No script a seguir, a variável $rp é uma matriz de pontos de recuperação dos últimos sete dias para o item de backup selecionado. A matriz é classificada em ordem inversa de tempo com o último ponto de recuperação no índice 0. Use a indexação de matriz padrão do PowerShell para selecionar o ponto de recuperação. No exemplo, $rp[0] seleciona o último ponto de recuperação.

$startDate = (Get-Date).AddDays(-7)
$endDate = Get-Date
$rp = Get-AzRecoveryServicesBackupRecoveryPoint -Item $backupitem -StartDate $startdate.ToUniversalTime() -EndDate $enddate.ToUniversalTime() -VaultId $targetVault.ID
$rp[0]

A saída deverá ser semelhante ao seguinte exemplo:

RecoveryPointAdditionalInfo :
SourceVMStorageType         : NormalStorage
Name                        : 15260861925810
ItemName                    : VM;iaasvmcontainer;RGName1;V2VM
RecoveryPointId             : /subscriptions/XX/resourceGroups/ RGName1/providers/Microsoft.RecoveryServices/vaults/testvault/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainer;RGName1;V2VM/protectedItems/VM;iaasvmcontainer; RGName1;V2VM/recoveryPoints/15260861925810
RecoveryPointType           : AppConsistent
RecoveryPointTime           : 4/23/2016 5:02:04 PM
WorkloadType                : AzureVM
ContainerName               : IaasVMContainer;iaasvmcontainer; RGName1;V2VM
ContainerType               : AzureVM
BackupManagementType        : AzureVM

Restaure os discos

Use o cmdlet Restore-AzRecoveryServicesBackupItem para restaurar os dados de backup e a configuração de um item de backup para um ponto de recuperação. Depois de identificar um ponto de recuperação, use-o como o valor para o parâmetro -RecoveryPoint. No exemplo acima, $rp[0] foi o ponto de recuperação a ser usado. No código de exemplo abaixo, $rp [0] é o ponto de recuperação a ser usado para a restauração do disco.

Para restaurar as informações de discos e de configuração:

$restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -VaultId $targetVault.ID
$restorejob

Restaurar discos gerenciados

Observação

Se a VM da qual foi feito backup tem discos gerenciados e você deseja restaurá-los como discos gerenciados, introduzimos a funcionalidade do módulo do Azure PowerShell RM v6.7.0. em diante.

Forneça um parâmetro adicional TargetResourceGroupName para especificar o RG para o qual os discos gerenciados serão restaurados.

Importante

É altamente recomendável usar o parâmetro TargetResourceGroupName para a restauração de discos gerenciados, pois isso resulta em melhorias significativas de desempenho. Se esse parâmetro não for fornecido, você não poderá se beneficiar da funcionalidade de restauração instantânea e a operação de restauração será mais lenta em comparação. Se a finalidade for restaurar discos gerenciados como discos não gerenciados, não forneça esse parâmetro e torne a intenção clara fornecendo o parâmetro -RestoreAsUnmanagedDisks. O parâmetro -RestoreAsUnmanagedDisks está disponível do Azure PowerShell 3.7.0 em diante. Em versões futuras, será obrigatório fornecer qualquer um desses parâmetros para a experiência de restauração correta.

$restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -TargetResourceGroupName "DestRGforManagedDisks" -VaultId $targetVault.ID

O arquivo VMConfig.JSON será restaurado para a conta de armazenamento, e os discos gerenciados serão restaurados para o RG de destino especificado.

A saída deverá ser semelhante ao seguinte exemplo:

WorkloadName     Operation          Status               StartTime                 EndTime            JobID
------------     ---------          ------               ---------                 -------          ----------
V2VM              Restore           InProgress           4/23/2016 5:00:30 PM                        cf4b3ef5-2fac-4c8e-a215-d2eba4124f27

Use o cmdlet Wait-AzRecoveryServicesBackupJob para aguardar a conclusão do trabalho de Restauração.

Wait-AzRecoveryServicesBackupJob -Job $restorejob -Timeout 43200

Após a conclusão do trabalho de Restauração, use o cmdlet Get-AzRecoveryServicesBackupJobDetail para obter os detalhes da operação de restauração. A propriedade JobDetails tem as informações necessárias para recompilar a VM.

$restorejob = Get-AzRecoveryServicesBackupJob -Job $restorejob -VaultId $targetVault.ID
$details = Get-AzRecoveryServicesBackupJobDetail -Job $restorejob -VaultId $targetVault.ID

Usando a identidade gerenciada para restaurar discos

O Backup do Azure também permite usar a MSI (identidade gerenciada) durante a operação de restauração para acessar contas de armazenamento nas quais os discos devem ser restaurados. Atualmente, essa opção tem suporte apenas para a restauração de disco gerenciado.

Para usar a identidade gerenciada que foi atribuída pelo sistema do cofre na restauração de discos, transmita um sinalizador adicional - UseSystemAssignedIdentity para o comando Restore-AzRecoveryServicesBackupItem. Para usar a identidade gerenciada que foi atribuída por um usuário, transmita um parâmetro -UserAssignedIdentityId com a ID do Azure Resource Manager da identidade gerenciada do cofre como o valor do parâmetro. Veja este artigo para saber como habilitar a identidade gerenciada para seus cofres.

Restaurar discos seletivos

Um usuário pode restaurar seletivamente alguns discos em vez do conjunto de backup completo. Forneça os LUNs de disco necessários como parâmetro para restaurá-los somente em vez de todo o conjunto, conforme documentado aqui.

Importante

Pra restaurar discos seletivamente é necessário fazer o backup dos discos seletivamente. Mais detalhes aqui.

Depois de restaurar os discos, vá para a próxima seção para criar a VM.

Restaurar discos para uma região secundária

Se a restauração entre regiões estiver habilitada no cofre com o qual você protegeu suas VMs, os dados de backup serão replicados para a região secundária. Você pode usar os dados de backup para executar uma restauração. Execute as seguintes etapas para disparar uma restauração na região secundária:

  1. Busque a ID do cofre com a qual suas VMs estão protegidas.

  2. Selecione o item de backup correto a ser restaurado.

  3. Selecione o ponto de recuperação apropriado na região secundária que você deseja usar para executar a restauração.

    Para concluir esta etapa, execute o comando a seguir:

    $rp=Get-AzRecoveryServicesBackupRecoveryPoint -UseSecondaryRegion -Item $backupitem -VaultId $targetVault.ID
    $rp=$rp[0]
    
  4. Execute o cmdlet Restore-AzRecoveryServicesBackupItem com o parâmetro -RestoreToSecondaryRegion para disparar uma restauração na região secundária.

    Para concluir esta etapa, execute o comando a seguir:

    $restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -TargetResourceGroupName "DestRGforManagedDisks" -VaultId $targetVault.ID -VaultLocation $targetVault.Location -RestoreToSecondaryRegion -RestoreOnlyOSDisk
    

    A saída será semelhante ao exemplo seguinte:

    WorkloadName     Operation             Status              StartTime                 EndTime          JobID
    ------------     ---------             ------              ---------                 -------          ----------
    V2VM             CrossRegionRestore   InProgress           4/23/2016 5:00:30 PM                       cf4b3ef5-2fac-4c8e-a215-d2eba4124f27
    
  5. Execute o cmdlet Get-AzRecoveryServicesBackupJob com o parâmetro -UseSecondaryRegion para monitorar o trabalho de restauração.

    Para concluir esta etapa, execute o comando a seguir:

    Get-AzRecoveryServicesBackupJob -From (Get-Date).AddDays(-7).ToUniversalTime() -To (Get-Date).ToUniversalTime() -UseSecondaryRegion -VaultId $targetVault.ID
    

    A saída será semelhante ao exemplo seguinte:

    WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
    ------------     ---------            ------               ---------                 -------                   -----
    V2VM             CrossRegionRestore   InProgress           2/8/2021 4:24:57 PM                                 2d071b07-8f7c-4368-bc39-98c7fb2983f7
    

Restauração entre zonas

É possível restaurar VMs fixadas na zona do Azure em quaisquer zonas de disponibilidade da mesma região.

Para restaurar uma VM em outra zona, especifique o parâmetro TargetZoneNumber no cmdletRestore-AzRecoveryServicesBackupItem.

$restorejob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName "DestAccount" -StorageAccountResourceGroupName "DestRG" -VaultId $targetVault.ID -TargetZoneNumber 3

A saída será semelhante ao exemplo seguinte:

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
zonevmeus2       Restore              InProgress           1/3/2022 10:27:20 AM                                b2298...

A restauração entre zonas só é suportada em cenários em que:

  • A VM de origem está fixada na zona e NÃO está criptografada.
  • O ponto de recuperação está presente apenas no nível do cofre. Não há suporte para instantâneos apenas ou instantâneos e camada de cofre.
  • A opção de recuperação é criar uma nova VM ou restaurar discos. A opção Substituir discos substitui os dados de origem; portanto, a opção zona de disponibilidade não é aplicável.
  • Criar VM/discos na mesma região quando a redundância de armazenamento do cofre é ZRS. Observe que isso não funcionará se a redundância de armazenamento do cofre for GRS, apesar de a VM de origem ser fixada na zona.
  • A criação de VM/discos na região emparelhada quando a redundância de armazenamento do cofre estiver habilitada para restauração entre regiões e se a região emparelhada suportar zonas.

Substituir discos na VM do Azure

Para substituir os discos e as informações de configuração, execute as seguintes etapas:

Criar uma máquina virtual de discos restaurados

Depois de restaurar os discos, use as seguintes etapas para criar e configurar a máquina virtual do disco.

Observação

  1. O módulo AzureAz 3.0.0 ou superior é necessário.
  2. Para criar VMs criptografadas de discos restaurados, a função do Azure deverá ter permissão para executar a ação Microsoft.KeyVault/vaults/deploy/action. Se sua função não tem essa permissão, crie uma função personalizada com esta ação. Para obter mais informações, confira Funções personalizadas do Azure.
  3. Após a restauração dos discos, você pode obter um modelo de implantação para criar diretamente uma nova VM. Você não precisa diferentes de cmdlets do PowerShell para criar VMs gerenciadas/não gerenciadas que são criptografadas/descriptografadas.

Criar uma VM usando o modelo de implantação

Os detalhes do trabalho resultante fornecem o URI do modelo, o qual pode ser consultado e implantado.

   $properties = $details.properties
   $storageAccountName = $properties["Target Storage Account Name"]
   $containerName = $properties["Config Blob Container Name"]
   $templateBlobURI = $properties["Template Blob Uri"]

O modelo não pode ser acessado diretamente, pois está sob a conta de armazenamento de um cliente e o contêiner fornecido. Precisamos da URL completa (junto com um token SAS temporário) para acessar esse modelo.

  1. Primeiro extraia o nome do modelo do templateBlobURI. O formato é mencionado abaixo. Você pode usar a operação de divisão no PowerShell para extrair o nome do modelo final desta URL.

    https://<storageAccountName.blob.core.windows.net>/<containerName>/<templateName>
    
  2. Em seguida, a URL completa pode ser gerada conforme explicado aqui.

    Set-AzCurrentStorageAccount -Name $storageAccountName -ResourceGroupName <StorageAccount RG name>
    $templateBlobFullURI = New-AzStorageBlobSASToken -Container $containerName -Blob <templateName> -Permission r -FullUri
    
  3. Basta implantar o modelo para criar uma nova VM, conforme explicado aqui.

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup -TemplateUri $templateBlobFullURI
    

Criar uma VM usando o arquivo de configuração

A seção a seguir lista as etapas necessárias para criar uma VM usando o arquivo VMConfig.

Observação

Recomendamos muito o uso do modelo de implantação detalhado acima para criar uma VM. Esta seção (pontos 1 a 6) será preterida em breve.

  1. Consulte as propriedades do disco restaurado para obter os detalhes do trabalho.

    $properties = $details.properties
    $storageAccountName = $properties["Target Storage Account Name"]
    $containerName = $properties["Config Blob Container Name"]
    $configBlobName = $properties["Config Blob Name"]
    
  2. Defina o contexto do armazenamento do Azure e restaure o arquivo de configuração JSON.

    Set-AzCurrentStorageAccount -Name $storageaccountname -ResourceGroupName "testvault"
    $destination_path = "C:\vmconfig.json"
    Get-AzStorageBlobContent -Container $containerName -Blob $configBlobName -Destination $destination_path
    $obj = ((Get-Content -Path $destination_path -Raw -Encoding Unicode)).TrimEnd([char]0x00) | ConvertFrom-Json
    
  3. Use o arquivo de configuração JSON para criar a configuração da VM.

    $vm = New-AzVMConfig -VMSize $obj.'properties.hardwareProfile'.vmSize -VMName "testrestore"
    
  4. Anexe o disco do sistema operacional e os discos de dados. Esta etapa fornece exemplos para várias configurações de VM gerenciadas e criptografadas. Use o exemplo que atenda à sua configuração de VM.

    • VMs não gerenciadas e não criptografadas - use a amostra a seguir para VMs não gerenciadas e não criptografadas.
        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.StorageProfile'.osDisk.vhd.Uri -CreateOption "Attach"
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.StorageProfile'.OsDisk.OsType
        foreach($dd in $obj.'properties.StorageProfile'.DataDisks)
        {
            $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
    • VMs não gerenciadas e criptografadas com o Microsoft Entra ID (somente BEK): para VMs não gerenciadas e criptografadas com o Microsoft Entra ID (criptografadas usando somente BEK), você precisa restaurar o segredo para o cofre de chaves antes de poder anexar discos. Para obter mais informações, confira Restore an encrypted virtual machine from an Azure Backup recovery point (Restaurar uma máquina virtual criptografada de um ponto de recuperação do Backup do Azure). O exemplo a seguir mostra como anexar discos de dados e de SO a VMs criptografadas. Ao definir o disco do sistema operacional, certifique-se de mencionar o tipo de sistema operacional relevante.
        $dekUrl = "https://ContosoKeyVault.vault.azure.net:443/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
        $dekUrl = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.storageProfile'.osDisk.vhd.uri -DiskEncryptionKeyUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -CreateOption "Attach" -Windows/Linux
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.storageProfile'.osDisk.osType
        foreach($dd in $obj.'properties.storageProfile'.dataDisks)
        {
        $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
        $dekUrl = "https://ContosoKeyVault.vault.azure.net:443/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
        $kekUrl = "https://ContosoKeyVault.vault.azure.net:443/keys/ContosoKey007/x9xxx00000x0000x9b9949999xx0x006"
        $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.storageProfile'.osDisk.vhd.uri -DiskEncryptionKeyUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -KeyEncryptionKeyUrl $kekUrl -KeyEncryptionKeyVaultId $keyVaultId -CreateOption "Attach" -Windows
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.storageProfile'.osDisk.osType
        foreach($dd in $obj.'properties.storageProfile'.dataDisks)
        {
        $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
    • VMs não gerenciadas e criptografadas sem o Microsoft Entra ID (somente BEK): para VMs não gerenciadas e criptografadas sem o Microsoft Entra ID (criptografadas usando somente BEK), se a fonte keyVault/secret não estiver disponível, restaure os segredos para o cofre de chaves usando o procedimento em Restaurar uma máquina virtual não criptografada a partir de um ponto de recuperação do Backup do Azure. Em seguida, execute os scripts abaixo para definir detalhes de criptografia no blob do sistema operacional restaurado (essa etapa não é necessária para blob de dados). O $dekurl pode ser buscado do keyVault restaurado.

    O script abaixo somente precisará ser executado quando o keyVault/secret de origem não estiver disponível.

        $dekUrl = "https://ContosoKeyVault.vault.azure.net/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
        $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
        $encSetting = "{""encryptionEnabled"":true,""encryptionSettings"":[{""diskEncryptionKey"":{""sourceVault"":{""id"":""$keyVaultId""},""secretUrl"":""$dekUrl""}}]}"
        $osBlobName = $obj.'properties.StorageProfile'.osDisk.name + ".vhd"
        $osBlob = Get-AzStorageBlob -Container $containerName -Blob $osBlobName
        $osBlob.ICloudBlob.Metadata["DiskEncryptionSettings"] = $encSetting
        $osBlob.ICloudBlob.SetMetadata()
    

    Depois que os segredos forem disponibilizados e os detalhes de criptografia também estiverem definidos no blob do sistema operacional, anexe os discos usando o script abaixo.

    Se o keyVault/secrets de origem já estiverem disponíveis, o script acima não precisará ser executado.

        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.StorageProfile'.osDisk.vhd.Uri -CreateOption "Attach"
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.StorageProfile'.OsDisk.OsType
        foreach($dd in $obj.'properties.StorageProfile'.DataDisks)
        {
        $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
    • VMs não gerenciadas e criptografadas sem o Microsoft Entra ID (BEK e KEK) - Para VMs criptografadas e não gerenciadas sem o Microsoft Entra ID (criptografadas usando BEK e KEK), se a origem keyVault/key/secret não estiver disponível, restaure a chave e os segredos para o cofre de chaves usando o procedimento em Restaurar uma máquina virtual não criptografada de um ponto de recuperação do Backup do Azure. Em seguida, execute os scripts abaixo para definir detalhes de criptografia no blob do sistema operacional restaurado (essa etapa não é necessária para blob de dados). O $dekurl e $kekurl podem ser buscados do keyVault restaurado.

    O script abaixo precisará ser executado somente quando keyVault/key/secret de origem não estiverem disponíveis.

        $dekUrl = "https://ContosoKeyVault.vault.azure.net/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
        $kekUrl = "https://ContosoKeyVault.vault.azure.net/keys/ContosoKey007/x9xxx00000x0000x9b9949999xx0x006"
        $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
        $encSetting = "{""encryptionEnabled"":true,""encryptionSettings"":[{""diskEncryptionKey"":{""sourceVault"":{""id"":""$keyVaultId""},""secretUrl"":""$dekUrl""},""keyEncryptionKey"":{""sourceVault"":{""id"":""$keyVaultId""},""keyUrl"":""$kekUrl""}}]}"
        $osBlobName = $obj.'properties.StorageProfile'.osDisk.name + ".vhd"
        $osBlob = Get-AzStorageBlob -Container $containerName -Blob $osBlobName
        $osBlob.ICloudBlob.Metadata["DiskEncryptionSettings"] = $encSetting
        $osBlob.ICloudBlob.SetMetadata()
    

    Depois que chave/segredos forem disponibilizados e os detalhes de criptografia estiverem definidos no blob do sistema operacional, anexe os discos usando o script abaixo.

    Se keyVault/key/secrets de origem estiverem disponíveis, o script acima não precisará ser executado.

        Set-AzVMOSDisk -VM $vm -Name "osdisk" -VhdUri $obj.'properties.StorageProfile'.osDisk.vhd.Uri -CreateOption "Attach"
        $vm.StorageProfile.OsDisk.OsType = $obj.'properties.StorageProfile'.OsDisk.OsType
        foreach($dd in $obj.'properties.StorageProfile'.DataDisks)
        {
        $vm = Add-AzVMDataDisk -VM $vm -Name "datadisk1" -VhdUri $dd.vhd.Uri -DiskSizeInGB 127 -Lun $dd.Lun -CreateOption "Attach"
        }
    
    • VMs gerenciadas e não criptografadas ‒ para as VMs não criptografadas gerenciadas, anexe os discos gerenciados restaurados. Para obter informações detalhadas, confira Anexar um disco de dados a uma VM do Windows usando o PowerShell.

    • VMs gerenciadas e criptografadas com o Microsoft Entra ID (somente BEK): para VMs gerenciadas e criptografadas com O Microsoft Entra ID (criptografadas usando somente BEK), anexe os discos gerenciados restaurados. Para obter informações detalhadas, confira Anexar um disco de dados a uma VM do Windows usando o PowerShell.

    • VMs gerenciadas e criptografadas com o Microsoft Entra ID (BEK e KEK): para VMs gerenciadas e criptografadas com o Microsoft Entra ID (criptografadas usando BEK e KEK), anexe os discos gerenciados restaurados. Para obter informações detalhadas, confira Anexar um disco de dados a uma VM do Windows usando o PowerShell.

    • VMs gerenciadas e criptografadas sem o Microsoft Entra ID (somente BEK): para VMs gerenciadas e criptografadas sem o Microsoft Entra ID (criptografadas usando somente BEK), se a fonte keyVault/secret não estiver disponível, restaure os segredos para o cofre de chaves usando o procedimento em Restaurar uma máquina virtual não criptografada a partir de um ponto de recuperação do Backup do Azure. Em seguida, execute os seguintes scripts para definir detalhes de criptografia no disco do sistema operacional restaurado (essa etapa não é necessária para o disco de dados). O $dekurl pode ser buscado do keyVault restaurado.

    O script abaixo precisará ser executado somente quando o keyVault/secret de origem não estiverem disponíveis.

    $dekUrl = "https://ContosoKeyVault.vault.azure.net/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
    $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
    $diskupdateconfig = New-AzDiskUpdateConfig -EncryptionSettingsEnabled $true
    $encryptionSettingsElement = New-Object Microsoft.Azure.Management.Compute.Models.EncryptionSettingsElement
    $encryptionSettingsElement.DiskEncryptionKey = New-Object Microsoft.Azure.Management.Compute.Models.KeyVaultAndSecretReference
    $encryptionSettingsElement.DiskEncryptionKey.SourceVault = New-Object Microsoft.Azure.Management.Compute.Models.SourceVault
    $encryptionSettingsElement.DiskEncryptionKey.SourceVault.Id = $keyVaultId
    $encryptionSettingsElement.DiskEncryptionKey.SecretUrl = $dekUrl
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettings = New-Object System.Collections.Generic.List[Microsoft.Azure.Management.Compute.Models.EncryptionSettingsElement]
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettings.Add($encryptionSettingsElement)
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettingsVersion = "1.1"
    Update-AzDisk -ResourceGroupName "testvault" -DiskName $obj.'properties.StorageProfile'.osDisk.name -DiskUpdate $diskupdateconfig
    

    Depois que os segredos estiverem disponíveis e os detalhes da criptografia forem definidos no disco do sistema operacional, para anexar os discos gerenciados restaurados, confira Anexar um disco de dados a uma VM do Windows com o PowerShell.

    • VMs gerenciadas e criptografadas sem o Microsoft Entra ID (BEK e KEK) - Para VMs gerenciadas e criptografadas sem o Microsoft Entra ID (criptografadas usando BEK e KEK), se a origem keyVault/key/secret não estiver disponível, restaure a chave e os segredos para o cofre de chaves usando o procedimento em Restaurar uma máquina virtual não criptografada a partir de um ponto de recuperação do Backup do Azure. Em seguida, execute os seguintes scripts para definir detalhes de criptografia no disco do sistema operacional restaurado (essa etapa não é necessária para o disco de dados). O $dekurl e $kekurl podem ser buscados do keyVault restaurado.

    O script abaixo somente precisará ser executado quando keyVault/key/secret de origem não estiver disponível.

    $dekUrl = "https://ContosoKeyVault.vault.azure.net/secrets/ContosoSecret007/xx000000xx0849999f3xx30000003163"
    $kekUrl = "https://ContosoKeyVault.vault.azure.net/keys/ContosoKey007/x9xxx00000x0000x9b9949999xx0x006"
    $keyVaultId = "/subscriptions/abcdedf007-4xyz-1a2b-0000-12a2b345675c/resourceGroups/ContosoRG108/providers/Microsoft.KeyVault/vaults/ContosoKeyVault"
    $diskupdateconfig = New-AzDiskUpdateConfig -EncryptionSettingsEnabled $true
    $encryptionSettingsElement = New-Object Microsoft.Azure.Management.Compute.Models.EncryptionSettingsElement
    $encryptionSettingsElement.DiskEncryptionKey = New-Object Microsoft.Azure.Management.Compute.Models.KeyVaultAndSecretReference
    $encryptionSettingsElement.DiskEncryptionKey.SourceVault = New-Object Microsoft.Azure.Management.Compute.Models.SourceVault
    $encryptionSettingsElement.DiskEncryptionKey.SourceVault.Id = $keyVaultId
    $encryptionSettingsElement.DiskEncryptionKey.SecretUrl = $dekUrl
    $encryptionSettingsElement.KeyEncryptionKey = New-Object Microsoft.Azure.Management.Compute.Models.KeyVaultAndKeyReference
    $encryptionSettingsElement.KeyEncryptionKey.SourceVault = New-Object Microsoft.Azure.Management.Compute.Models.SourceVault
    $encryptionSettingsElement.KeyEncryptionKey.SourceVault.Id = $keyVaultId
    $encryptionSettingsElement.KeyEncryptionKey.KeyUrl = $kekUrl
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettings = New-Object System.Collections.Generic.List[Microsoft.Azure.Management.Compute.Models.EncryptionSettingsElement]
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettings.Add($encryptionSettingsElement)
    $diskupdateconfig.EncryptionSettingsCollection.EncryptionSettingsVersion = "1.1"
    Update-AzDisk -ResourceGroupName "testvault" -DiskName $obj.'properties.StorageProfile'.osDisk.name -DiskUpdate $diskupdateconfig
    

    Depois que a chave/segredos estiverem disponíveis e os detalhes da criptografia forem definidos no disco do sistema operacional, para anexar os discos gerenciados restaurados, confira Anexar um disco de dados a uma VM do Windows com o PowerShell.

  5. Defina as configurações de Rede.

    $nicName="p1234"
    $pip = New-AzPublicIpAddress -Name $nicName -ResourceGroupName "test" -Location "WestUS" -AllocationMethod Dynamic
    $virtualNetwork = New-AzVirtualNetwork -ResourceGroupName "test" -Location "WestUS" -Name "testvNET" -AddressPrefix 10.0.0.0/16
    $virtualNetwork | Set-AzVirtualNetwork
    $vnet = Get-AzVirtualNetwork -Name "testvNET" -ResourceGroupName "test"
    $subnetindex=0
    $nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName "test" -Location "WestUS" -SubnetId $vnet.Subnets[$subnetindex].Id -PublicIpAddressId $pip.Id
    $vm=Add-AzVMNetworkInterface -VM $vm -Id $nic.Id
    
  6. Crie a máquina virtual.

    New-AzVM -ResourceGroupName "test" -Location "WestUS" -VM $vm
    
  7. Enviar por push extensão ADE. Se as extensões de ADE não forem enviadas por push, os discos de dados serão marcados como não criptografados, portanto, é obrigatório que as etapas abaixo sejam executadas:

    • Para VM com o Microsoft Entra ID: use o seguinte comando para habilitar manualmente a criptografia para os discos de dados

      Somente BEK

      Set-AzVMDiskEncryptionExtension -ResourceGroupName $RG -VMName $vm.Name -AadClientID $aadClientID -AadClientSecret $aadClientSecret -DiskEncryptionKeyVaultUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -VolumeType Data
      

      BEK e KEK

      Set-AzVMDiskEncryptionExtension -ResourceGroupName $RG -VMName $vm.Name -AadClientID $aadClientID -AadClientSecret $aadClientSecret -DiskEncryptionKeyVaultUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId  -KeyEncryptionKeyUrl $kekUrl -KeyEncryptionKeyVaultId $keyVaultId -VolumeType Data
      
    • Para VMs sem o Microsoft Entra ID: use o seguinte comando para habilitar manualmente a criptografia para os discos de dados.

      Se, durante a execução do comando, AADClientID for solicitado, então será necessário atualizar seu Azure PowerShell.

      Somente BEK

      Set-AzVMDiskEncryptionExtension -ResourceGroupName $RG -VMName $vm.Name -DiskEncryptionKeyVaultUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -SkipVmBackup -VolumeType "All"
      

      BEK e KEK

      Set-AzVMDiskEncryptionExtension -ResourceGroupName $RG -VMName $vm.Name -DiskEncryptionKeyVaultUrl $dekUrl -DiskEncryptionKeyVaultId $keyVaultId -KeyEncryptionKeyUrl $kekUrl -KeyEncryptionKeyVaultId $keyVaultId -SkipVmBackup -VolumeType "All"
      

Observação

Exclua manualmente os arquivos JASON criados como parte do processo de disco de restauração de VM criptografado.

Restaurar arquivos de um backup de VM do Azure

Além de restauração de discos, você também pode restaurar arquivos individuais de um backup de VM do Azure. A funcionalidade de restauração de arquivos fornece acesso a todos os arquivos em um ponto de recuperação. Gerencie os arquivos via File Explorer como faria para arquivos normais.

As etapas básicas para restaurar um arquivo de um backup de VM do Azure são:

  • Selecione a VM
  • Escolha um ponto de recuperação
  • Monte os discos do ponto de recuperação
  • Copie os arquivos necessários
  • Desmonte o disco

Selecionar a VM (ao restaurar a VM)

Para obter o objeto do PowerShell que identifica o item correto de backup, comece do contêiner no cofre e desça progressivamente na hierarquia de objetos. Para selecionar o contêiner que representa a VM, use o cmdlet Get-AzRecoveryServicesBackupContainer e o redirecione para o cmdlet Get-AzRecoveryServicesBackupItem.

$namedContainer = Get-AzRecoveryServicesBackupContainer  -ContainerType "AzureVM" -Status "Registered" -FriendlyName "V2VM" -VaultId $targetVault.ID
$backupitem = Get-AzRecoveryServicesBackupItem -Container $namedContainer  -WorkloadType "AzureVM" -VaultId $targetVault.ID

Escolher um ponto de recuperação (ao restaurar a VM)

Use o cmdlet Get-AzRecoveryServicesBackupRecoveryPoint para listar todos os pontos de recuperação para o item de backup. Em seguida, escolha o ponto de recuperação a ser restaurado. Se você não tiver certeza de qual ponto de recuperação será usado, é uma boa prática escolher o mais recente ponto RecoveryPointType = AppConsistent mais recente na lista.

No script a seguir, a variável $rp é uma matriz de pontos de recuperação dos últimos sete dias para o item de backup selecionado. A matriz é classificada em ordem inversa de tempo com o último ponto de recuperação no índice 0. Use a indexação de matriz padrão do PowerShell para selecionar o ponto de recuperação. No exemplo, $rp[0] seleciona o último ponto de recuperação.

$startDate = (Get-Date).AddDays(-7)
$endDate = Get-Date
$rp = Get-AzRecoveryServicesBackupRecoveryPoint -Item $backupitem -StartDate $startdate.ToUniversalTime() -EndDate $enddate.ToUniversalTime() -VaultId $targetVault.ID
$rp[0]

A saída deverá ser semelhante ao seguinte exemplo:

RecoveryPointAdditionalInfo :
SourceVMStorageType         : NormalStorage
Name                        : 15260861925810
ItemName                    : VM;iaasvmcontainer;RGName1;V2VM
RecoveryPointId             : /subscriptions/XX/resourceGroups/ RGName1/providers/Microsoft.RecoveryServices/vaults/testvault/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainer;RGName1;V2VM/protectedItems/VM;iaasvmcontainer; RGName1;V2VM/recoveryPoints/15260861925810
RecoveryPointType           : AppConsistent
RecoveryPointTime           : 4/23/2016 5:02:04 PM
WorkloadType                : AzureVM
ContainerName               : IaasVMContainer;iaasvmcontainer; RGName1;V2VM
ContainerType               : AzureVM
BackupManagementType        : AzureVM

Monte os discos do ponto de recuperação

Use o cmdlet Get-AzRecoveryServicesBackupRPMountScript para obter o script para montar todos os discos do ponto de recuperação.

Observação

Os discos são montados como discos conectados do iSCSI no computador em que o script é executado. A montagem ocorre imediatamente e você não incorre em nenhuma cobrança.

Get-AzRecoveryServicesBackupRPMountScript -RecoveryPoint $rp[0] -VaultId $targetVault.ID

A saída deverá ser semelhante ao seguinte exemplo:

OsType  Password        Filename
------  --------        --------
Windows e3632984e51f496 V2VM_wus2_8287309959960546283_451516692429_cbd6061f7fc543c489f1974d33659fed07a6e0c2e08740.exe

Execute o script no computador em que deseja recuperar os arquivos. Para executar o script, você deve inserir a senha fornecida. Depois que os discos estiverem conectados, use o Windows File Explorer para procurar os novos volumes e arquivos. Para obter mais informações, consulte o artigo do Backup, Recuperar arquivos do backup da máquina virtual do Azure.

Desmonte os discos

Quando os arquivos necessários forem copiados, use Disable-AzRecoveryServicesBackupRPMountScript para desmontar os discos. Certifique-se de desmontar os discos para que o acesso aos arquivos do ponto de recuperação é removido.

Disable-AzRecoveryServicesBackupRPMountScript -RecoveryPoint $rp[0] -VaultId $targetVault.ID

Restaurar dados na máquina virtual usando o PowerShell

Agora você pode restaurar dados diretamente para a VM original/alternativa sem executar várias etapas.

Restaurar dados na VM original

$vault = Get-AzRecoveryServicesVault -ResourceGroupName "resourceGroup" -Name "vaultName"
$BackupItem = Get-AzRecoveryServicesBackupItem -BackupManagementType "AzureVM" -WorkloadType "AzureVM" -Name "V2VM" -VaultId $vault.ID
$StartDate = (Get-Date).AddDays(-7)
$EndDate = Get-Date
$RP = Get-AzRecoveryServicesBackupRecoveryPoint -Item $BackupItem -StartDate $StartDate.ToUniversalTime() -EndDate $EndDate.ToUniversalTime() -VaultId $vault.ID
$OriginalLocationRestoreJob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $RP[0] -StorageAccountName "DestStorageAccount" -StorageAccountResourceGroupName "DestStorageAccRG" -VaultId $vault.ID -VaultLocation $vault.Location 
WorkloadName    Operation       Status          StartTime              EndTime
------------    ---------       ------          ---------              -------
V2VM            Restore         InProgress      26-Apr-16 1:14:01 PM   01-Jan-01 12:00:00 AM

O último comando dispara uma operação de restauração de local original para restaurar os dados in-loco na VM existente.

Restaurar dados para uma VM recém-criada

$vault = Get-AzRecoveryServicesVault -ResourceGroupName "resourceGroup" -Name "vaultName"
$BackupItem = Get-AzRecoveryServicesBackupItem -BackupManagementType "AzureVM" -WorkloadType "AzureVM" -Name "V2VM" -VaultId $vault.ID
$StartDate = (Get-Date).AddDays(-7)
$EndDate = Get-Date
$RP = Get-AzRecoveryServicesBackupRecoveryPoint -Item $BackupItem -StartDate $StartDate.ToUniversalTime() -EndDate $EndDate.ToUniversalTime() -VaultId $vault.ID
$AlternateLocationRestoreJob = Restore-AzRecoveryServicesBackupItem -RecoveryPoint $RP[0] -TargetResourceGroupName "Target_RG" -StorageAccountName "DestStorageAccount" -StorageAccountResourceGroupName "DestStorageAccRG" -TargetVMName "TagetVirtualMachineName" -TargetVNetName "Target_VNet" -TargetVNetResourceGroup "" -TargetSubnetName "subnetName" -VaultId $vault.ID -VaultLocation $vault.Location 
WorkloadName    Operation       Status          StartTime              EndTime
------------    ---------       ------          ---------              -------
V2VM            Restore         InProgress      26-Apr-16 1:14:01 PM   01-Jan-01 12:00:00 AM

O último comando dispara uma operação alternativa de restauração de local para criar uma VM no grupo de recursos em Target_RG de acordo com as entradas especificadas pelos parâmetros TargetVMName, TargetVNetName, TargetVNetResourceGroup, TargetSubnetName. Isso garante que os dados sejam restaurados na VM, na rede virtual e na sub-rede necessárias.

Próximas etapas

Se você preferir usar o PowerShell para interagir com os recursos do Azure, confira o artigo do PowerShell, Implantar e gerenciar Backup do Windows Server. Se você gerencia backups do DPM, consulte o artigo Implantar e gerenciar o backup do DPM.