Aggiungere runbook di Automazione di Azure ai piani di ripristino

Questo articolo descrive come integrare i runbook di Automazione di Azure per estendere i piani di ripristino di Azure Site Recovery. Viene illustrato come automatizzare attività di base che altrimenti necessiterebbero di un intervento manuale e convertire un ripristino in più passaggi in un'azione con un solo clic.

Piani di ripristino

È possibile usare i piani di ripristino quando si esegue il failover di computer locali o macchine virtuali di Azure. I piani di ripristino consentono di definire un processo di ripristino sistematico che definisce il failover dei computer e la modalità di avvio e ripristino dopo il failover.

Il ripristino di app di grandi dimensioni può essere complesso. I piani di ripristino consentono di imporre l'ordine in modo che il ripristino sia costantemente accurato, ripetibile e automatizzato. È possibile automatizzare le attività all'interno di un piano di ripristino usando script, nonché runbook di Automazione di Azure. Alcuni esempi tipici possono essere la configurazione delle impostazioni in una macchina virtuale di Azure dopo il failover o la riconfigurazione di un'app in esecuzione nella macchina virtuale.

Runbook nei piani di ripristino

Aggiungere un account e runbook di Automazione di Azure a un piano di ripristino. Il runbook viene richiamato quando viene eseguito il piano di ripristino.

  • L'account di Automazione può trovarsi in qualsiasi area di Azure e deve trovarsi nella stessa sottoscrizione dell'insieme di credenziali di Site Recovery.
  • Un runbook può essere eseguito in un piano di ripristino durante il failover da una posizione primaria a quella secondaria o durante il failback dalla posizione secondaria al database primario.
  • I runbook in un piano di ripristino vengono eseguiti in modo seriale, uno dopo l'altro, nell'ordine impostato.
  • Se i runbook in un piano di ripristino configurano le macchine virtuali per l'avvio in gruppi diversi, il piano di ripristino continuerà solo quando Azure segnala tutte le macchine virtuali come in esecuzione.
  • I piani di ripristino continuano a essere eseguiti, anche se uno script ha esito negativo.

Contesto del piano di ripristino

Quando viene eseguito uno script, inserisce un contesto del piano di ripristino nel runbook. Il contesto contiene le variabili riepilogate nella tabella.

Nome variabile Descrizione
RecoveryPlanName Nome del piano di ripristino. Usato nelle azioni in base al nome.
FailoverType Specifica se si tratta di un failover di test o di produzione.
FailoverDirection Specifica se il ripristino è in una posizione primaria o secondaria.
GroupID Identifica il numero del gruppo nel piano di ripristino quando il piano è in esecuzione.
VmMap Matrice di tutte le macchine virtuali nel gruppo.
VMMap key Chiave univoca (GUID) per ogni macchina virtuale.
SubscriptionId ID della sottoscrizione di Azure in cui viene creata la macchina virtuale.
ResourceGroupName Nome del gruppo di risorse in cui si trova la macchina virtuale.
CloudServiceName Nome del servizio cloud di Azure in cui è stata creata la macchina virtuale.
RoleName Nome della macchina virtuale di Azure.
RecoveryPointId Timestamp per il ripristino della macchina virtuale.

Nota

Il valore della variabile "FailoverDirection" sarà "PrimaryToSecondary" in caso di failover e "SecondaryToPrimary" in caso di failback.

L'esempio seguente mostra una variabile di contesto:

{"RecoveryPlanName":"hrweb-recovery",

```json
{
"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 si vuole accedere a tutte le macchine virtuali in VMMap in un ciclo, è possibile usare il codice seguente:

param (
    [parameter(Mandatory=$false)]
    [Object]$RecoveryPlanContext
)
$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
            }
        }

Il blog di Aman Sharma su Harvesting Clouds offre un esempio utile di uno script di contesto del piano di ripristino.

Prima di iniziare

  • Se non si ha familiarità con Automazione di Azure, è possibile iscriversi e scaricare script di esempio. Per altre informazioni, vedere Runbook di Automazione - Problemi noti e limitazioni.

  • Assicurarsi che l'account di Automazione abbia i moduli seguenti:

    • AzureRM.profile
    • AzureRM.Resources
    • AzureRM.Automation
    • AzureRM.Network
    • AzureRM.Compute

    Tutti i moduli devono essere di versioni compatibili. Il modo più semplice consiste nell'usare sempre le versioni più recenti di tutti i moduli.

Personalizzare il piano di ripristino

  1. Nell'insieme di credenziali selezionare Piani di ripristino (Site Recovery)

  2. Per creare un piano di ripristino, selezionare +Piano di ripristino. Altre informazioni. Se si dispone già di un piano di ripristino, selezionarlo per aprirlo.

  3. Nella pagina del piano di ripristino selezionare Personalizza.

    Select the Customize button

  4. Selezionare i puntini di sospensione (...) accanto a Gruppo 1: Avviare>Aggiungi azione post.

  5. In Inserisci azione verificare che sia selezionato Script e specificare un nome per lo script (Hello World).

  6. Specificare un account di automazione e selezionare un runbook. Per salvare lo script, selezionare OK. Lo script viene aggiunto a Gruppo 1: passaggi successivi.

Riutilizzare lo script del runbook

È possibile usare un singolo script di runbook in più piani di ripristino usando variabili esterne.

  • È possibile usare variabili di Automazione di Azure per archiviare i parametri per l'esecuzione di un piano di ripristino.
  • Aggiungendo il nome del piano di ripristino come prefisso per la variabile, è possibile creare singole variabili per ogni piano di ripristino. Usare quindi le variabili come parametri.
  • È possibile modificare un parametro senza modificare lo script, cambiando comunque il funzionamento dello script.

Usare una variabile di tipo stringa semplice nello script di un runbook

In questo esempio, uno script accetta l'input di un gruppo di sicurezza di rete e lo applica alle macchine virtuali in un piano di ripristino.

  1. In modo che lo script possa rilevare il piano di ripristino in esecuzione, usare questo contesto del piano di ripristino:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    }
    
  2. Prendere nota del nome del gruppo di sicurezza di rete e del gruppo di risorse. Si usano queste variabili come input per gli script dei piani di ripristino.

  3. Negli asset dell'account di Automazione. creare una variabile per archiviare il nome del gruppo sicurezza di rete. Aggiungere un prefisso al nome della variabile usando il nome del piano di ripristino.

    Create an NSG name variable

  4. Creare una variabile per archiviare il nome del gruppo di risorse per la risorsa del gruppo di sicurezza di rete. Aggiungere un prefisso al nome della variabile usando il nome del piano di ripristino.

    Create an NSG resource group name

  5. Nello script usare questo codice di riferimento per ottenere i valori delle variabili:

    Create an NSG resource group name

  6. Nello script usare questo codice di riferimento per ottenere i valori delle variabili:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  7. Usare le variabili nel runbook per applicare il gruppo di sicurezza di rete all'interfaccia di rete della macchina virtuale di cui è stato eseguito il failover:

    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
        }
    }
    

Creare variabili indipendenti per ogni piano di ripristino, in modo che sia possibile riutilizzare lo script. Aggiungere un prefisso con il nome del piano di ripristino.

Per uno script completo end-to-end per questo scenario, vedere questo script.

Usare una variabile complessa per archiviare altre informazioni

In alcuni scenari potrebbe non essere possibile creare variabili separate per ogni piano di ripristino. Si consideri uno scenario in cui si vuole assegnare un singolo script a un indirizzo IP pubblico in macchine virtuali specifiche. In un altro scenario potrebbe essere necessario applicare gruppi di sicurezza di rete diversi in diverse macchine virtuali e non in tutte le macchine virtuali. Tenere presente quanto segue:

  • È possibile creare uno script riutilizzabile per qualsiasi piano di ripristino.
  • Ogni piano di ripristino può avere un numero variabile di macchine virtuali.
  • Ad esempio, un ripristino di SharePoint ha due front-end. Un'applicazione line-of-business (LOB) semplice ha un solo front-end.
  • In questo scenario non è possibile creare variabili separate per ogni piano di ripristino.

Nell'esempio seguente viene usata una nuova tecnica e viene creata una variabile complessa negli asset dell'account di Automazione di Azure.

A tale scopo, è necessario specificare più valori usando Azure PowerShell.

  1. In PowerShell accedere alla sottoscrizione di Azure:

    Connect-AzureRmAccount
    $sub = Get-AzureRmSubscription -Name <SubscriptionName>
    $sub | Select-AzureRmSubscription
    
  2. Per archiviare i parametri, creare la variabile complessa usando il nome del piano di ripristino:

    $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. In questa variabile complessa VMDetails è l'ID della macchina virtuale protetta. Per ottenere l'ID di macchina virtuale, visualizzare le proprietà della macchina virtuale nel portale di Azure. Lo screenshot seguente mostra una variabile che archivia i dettagli di due macchine virtuali:

    Use the VM ID as the GUID

  4. Usare questa variabile nel runbook. Se il GUID della macchina virtuale indicato viene trovato nel contesto del piano di ripristino, è possibile applicare il gruppo di sicurezza di rete nella macchina virtuale:

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. Nel runbook scorrere in ciclo le macchine virtuali del contesto del piano di ripristino. Controllare se la macchina virtuale esiste in $VMDetailsObj. Se esiste, accedere alle proprietà della variabile per applicare il gruppo di sicurezza di rete:

        $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
            }
        }
    

È possibile usare lo stesso script per piani di ripristino diversi. Immettere parametri diversi archiviando il valore corrispondente a un piano di ripristino in variabili diverse.

Script di esempio

Per distribuire gli script di esempio nell'account di Automazione, selezionare il pulsante Distribuisci in Azure.

Deploy to Azure

Passaggi successivi