Adicionar runbooks de Automatização do Azure aos planos de recuperação

Este artigo descreve como integrar Automatização do Azure runbooks, para estender os planos de recuperação Site Recovery Azure. Mostramos-lhe como automatizar tarefas básicas, que de outra forma precisariam de intervenção manual, e como converter uma recuperação com vários passos numa ação de clique único.

Planos de recuperação

Pode utilizar planos de recuperação quando falhar com máquinas no local ou VMs Azure. Os planos de recuperação ajudam-no a definir um processo de recuperação sistemático que define como as máquinas falham e como começam e recuperam após o fracasso.

A recuperação de grandes aplicações pode ser complexa. Os planos de recuperação ajudam a impor a ordem para que a recuperação seja consistentemente precisa, repetível e automatizada. Pode automatizar tarefas dentro de um plano de recuperação utilizando scripts, bem como Automatização do Azure livros de ensaio. Exemplos típicos podem estar a configurar configurações num VM Azure após o failover ou a reconfigurar uma aplicação que está a ser executada no VM.

Runbooks em planos de recuperação

Adicione uma conta Automatização do Azure e livros de execução a um plano de recuperação. O livro é invocado quando o plano de recuperação é executado.

  • A conta Automation pode estar em qualquer região de Azure, e deve estar na mesma subscrição que o cofre Site Recovery.
  • Um runbook pode funcionar num plano de recuperação durante o failover de um local primário para secundário, ou durante o recuo da localização secundária para a primária.
  • Os livros de bordo de um plano de recuperação são executados em série, um após o outro, na ordem definida.
  • Se os runbooks de um plano de recuperação configurar VMs para iniciar em diferentes grupos, o plano de recuperação só continuará quando a Azure reportar todos os VMs como funcionando.
  • Os planos de recuperação continuam a decorrer, mesmo que um guião falhe.

Contexto do plano de recuperação

Quando um script é executado, injeta um contexto de plano de recuperação no livro de recortes. O contexto contém as variáveis resumidas na tabela.

Nome variável Descrição
Nome do Plano de Recuperação Nome do plano de recuperação. Usado em ações baseadas no nome.
Falha de falha Especifica se é um teste ou falha de produção.
FailoverDirection Especifica se a recuperação é para uma localização primária ou secundária.
GrupoID Identifica o número de grupo no plano de recuperação quando o plano está em execução.
VmMap Uma série de todos os VMs do grupo.
Chave VMMap Uma chave única (GUID) para cada VM.
SubscriptionId O ID de assinatura Azure no qual o VM foi criado.
ResourceGroupName Nome do grupo de recursos em que se encontra o VM.
CloudServiceName O nome de serviço em nuvem Azure sob o qual o VM foi criado.
RoleName O nome do Azure VM.
RecoveryPointId O tempo de recuperação do VM.

Nota

O valor para a variável 'FailoverDirection' será 'PrimaryToSecondary' em caso de failover e 'SecondaryToPrimary' em caso de falha.

O exemplo a seguir mostra uma variável de contexto:

{"RecoveryPlanName":"hrweb-recovery",
"FailoverType":"Test",
"FailoverDirection":"PrimaryToSecondary",
"GroupId":"1",
"VmMap":{"7a1069c6-c1d6-49c5-8c5d-33bfce8dd183":
	{ "SubscriptionId":"7a1111111-c1d6-49c5-8c5d-111ce8dd183",
	"ResourceGroupName":"ContosoRG",
	"CloudServiceName":"pod02hrweb-Chicago-test",
	"RoleName":"Fabrikam-Hrweb-frontend-test",
	"RecoveryPointId":"TimeStamp"}
	}
}

Se pretender aceder a todos os VMs em VMMap num loop, pode utilizar o seguinte código:

$VMinfo = $RecoveryPlanContext.VmMap | Get-Member | Where-Object MemberType -EQ NoteProperty | select -ExpandProperty Name
$vmMap = $RecoveryPlanContext.VmMap
    foreach($VMID in $VMinfo)
    {
        $VM = $vmMap.$VMID                
            if( !(($VM -eq $Null) -Or ($VM.ResourceGroupName -eq $Null) -Or ($VM.RoleName -eq $Null))) {
            #this check is to ensure that we skip when some data is not available else it will fail
    Write-output "Resource group name ", $VM.ResourceGroupName
    Write-output "Rolename " = $VM.RoleName
            }
        }

O blog de Aman Sharma na Harvesting Clouds tem um exemplo útil de um roteiro de contexto de plano de recuperação.

Antes de começar

Personalizar o plano de recuperação

  1. No cofre, selecione Planos de Recuperação (Site Recovery)

  2. Para criar um plano de recuperação, clique em +Plano de Recuperação. Saiba mais. Se já tem um plano de recuperação, então selecione para abri-lo.

  3. Na página do plano de recuperação, clique em Personalizar.

    Clique no botão Personalizar

  4. Clique nas elipses (...) ao lado do Grupo 1: Iniciar>ação de publicação.

  5. Na ação Insira, verifique se o Script está selecionado e especifique um nome para o script (Hello World).

  6. Especifique uma conta de automação e selecione um livro de contas. Para guardar o script, clique em OK. O guião é adicionado ao Grupo 1: Pós-passos.

Reutilizar um script de runbook

Você pode usar um único script runbook em planos de recuperação múltiplas, usando variáveis externas.

  • Utiliza-se variáveis Automatização do Azure para armazenar parâmetros para executar um plano de recuperação.
  • Ao adicionar o nome do plano de recuperação como prefixo à variável, pode criar variáveis individuais para cada plano de recuperação. Em seguida, use as variáveis como parâmetros.
  • Pode alterar um parâmetro sem alterar o script, mas ainda assim alterar a forma como o script funciona.

Use uma variável de corda simples em um script de runbook

Neste exemplo, um script leva a entrada de um Grupo de Segurança de Rede (NSG) e aplica-o aos VMs num plano de recuperação.

  1. Para que o script possa detetar qual o plano de recuperação em execução, use este contexto de plano de recuperação:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    
  2. Note o nome e o grupo de recursos NSG. Você usa estas variáveis como entradas para scripts de plano de recuperação.

  3. Nos ativos da conta Automation. criar uma variável para armazenar o nome NSG. Adicione um prefixo ao nome variável com o nome do plano de recuperação.

    Criar uma variável de nome NSG

  4. Crie uma variável para armazenar o nome do grupo de recursos para o recurso NSG. Adicione um prefixo ao nome variável com o nome do plano de recuperação.

    Criar um nome de grupo de recursos NSG

  5. No script, utilize este código de referência para obter os valores variáveis:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  6. Utilize as variáveis no livro de bordo para aplicar o NSG à interface de rede do VM falhado:

    InlineScript {
    if (($Using:NSGname -ne $Null) -And ($Using:NSGRGname -ne $Null)) {
    		$NSG = Get-AzureRmNetworkSecurityGroup -Name $Using:NSGname -ResourceGroupName $Using:NSGRGname
    		Write-output $NSG.Id
    		#Apply the NSG to a network interface
    		#$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName TestRG -Name TestVNet
    		#Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name FrontEnd `
    		#  -AddressPrefix 192.168.1.0/24 -NetworkSecurityGroup $NSG
    	}
    }
    

Para cada plano de recuperação, crie variáveis independentes para que possa reutilizar o script. Adicione um prefixo utilizando o nome do plano de recuperação.

Para um script completo e de ponta a ponta para este cenário, reveja este script.

Use uma variável complexa para armazenar mais informações

Em alguns cenários poderá não ser capaz de criar variáveis separadas para cada plano de recuperação. Considere um cenário em que pretende que um único script atribua um endereço IP público em VMs específicos. Noutro cenário, é possível que queira aplicar diferentes NSGs em VMs diferentes (não em todos os VMs). Tenha em atenção que:

  • Podes fazer um guião reutilizável para qualquer plano de recuperação.
  • Cada plano de recuperação pode ter um número variável de VMs.
  • Por exemplo, uma recuperação do SharePoint tem duas extremidades dianteiras. Uma aplicação básica de linha de negócios (LOB) tem apenas uma extremidade frontal.
  • Neste cenário não é possível criar variáveis separadas para cada plano de recuperação.

No exemplo seguinte, criamos uma variável complexa na conta Automatização do Azure.

Fazemos isso especificando vários valores, utilizando Azure PowerShell.

  1. Na PowerShell, inscreva-se na sua subscrição Azure:

     Connect-AzureRmAccount
     $sub = Get-AzureRmSubscription -Name <SubscriptionName>
     $sub | Select-AzureRmSubscription
    
  2. Para armazenar os parâmetros, crie a variável complexa utilizando o nome do plano de recuperação:

     $VMDetails = @{"VMGUID"=@{"ResourceGroupName"="RGNameOfNSG";"NSGName"="NameOfNSG"};"VMGUID2"=@{"ResourceGroupName"="RGNameOfNSG";"NSGName"="NameOfNSG"}}
     	New-AzureRmAutomationVariable -ResourceGroupName <RG of Automation Account> -AutomationAccountName <AA Name> -Name <RecoveryPlanName> -Value $VMDetails -Encrypted $false
    
  3. Nesta variável complexa, vMDetails é o VM ID para o VM protegido. Para obter o ID VM, no portal do Azure, veja as propriedades VM. A imagem que se segue mostra uma variável que armazena os detalhes de dois VMs:

    Utilize o VM ID como GUID

  4. Use esta variável no seu livro de bordo. Se o VM GUID indicado for encontrado no contexto do plano de recuperação, aplique o NSG no VM:

     $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. No seu runbook, loop através dos VMs do contexto do plano de recuperação. Verifique se o VM existe em $VMDetailsObj. Se existir, aceda às propriedades da variável para aplicar o NSG:

     	$VMinfo = $RecoveryPlanContext.VmMap | Get-Member | Where-Object MemberType -EQ NoteProperty | select -ExpandProperty Name
     	$vmMap = $RecoveryPlanContext.VmMap
    
     	foreach($VMID in $VMinfo) {
     		$VMDetails = $VMDetailsObj[$VMID].ToObject([hashtable]);
     		Write-output $VMDetails
     		if ($VMDetails -ne $Null) { #If the VM exists in the context, this will not be Null
     			$VM = $vmMap.$VMID
     			# Access the properties of the variable
     			$NSGname = $VMDetails.NSGName
     			$NSGRGname = $VMDetails.NSGResourceGroupName
    
     			# Add code to apply the NSG properties to the VM
     		}
     	}
    

Pode usar o mesmo script para diferentes planos de recuperação. Introduza diferentes parâmetros armazenando o valor que corresponde a um plano de recuperação em diferentes variáveis.

Scripts de exemplo

Para implementar scripts de amostra na sua conta Dem automação, clique no botão Implementar para Azure .

Implementar no Azure

Este vídeo dá outro exemplo. Demonstra como recuperar uma aplicação WordPress de duas camadas para a Azure:

Passos seguintes