Azure Automation-runbooks aan herstelplannen toevoegen

In dit artikel wordt beschreven hoe u Azure Automation-runbooks integreert om Azure Site Recovery-herstelplannen uit te breiden. We laten u zien hoe u basistaken automatiseert die anders handmatig moeten worden uitgevoerd, en hoe u een herstel met meerdere stappen kunt converteren naar een actie met één klik.

Herstelplannen

U kunt herstelplannen gebruiken wanneer u een failover uitvoert voor on-premises machines of Azure-VM's. Herstelplannen helpen u bij het definiëren van een systematisch herstelproces dat definieert hoe machines een failover uitvoeren en hoe ze na een failover worden gestart en hersteld.

Het herstellen van grote apps kan complex zijn. Herstelplannen helpen de volgorde op te leggen, zodat herstel consistent nauwkeurig, herhaalbaar en geautomatiseerd is. U kunt taken in een herstelplan automatiseren met behulp van scripts, evenals Azure Automation-runbooks. Typische voorbeelden zijn het configureren van instellingen op een Azure-VM na een failover of het opnieuw configureren van een app die wordt uitgevoerd op de VIRTUELE machine.

  • Meer informatie over herstelplannen.
  • Meer informatie over Azure Automation-runbooks.

Runbooks in herstelplannen

U voegt een Azure Automation-account en runbooks toe aan een herstelplan. Het runbook wordt aangeroepen wanneer het herstelplan wordt uitgevoerd.

  • Het Automation-account kan zich in elke Azure-regio bevinden en moet zich in hetzelfde abonnement bevinden als de Site Recovery-kluis.
  • Een runbook kan worden uitgevoerd in een herstelplan tijdens een failover van een primaire locatie naar een secundaire locatie of tijdens een failback van de secundaire locatie naar de primaire locatie.
  • Runbooks in een herstelplan worden serieel uitgevoerd, een na een, in de ingestelde volgorde.
  • Als runbooks in een herstelplan VM's configureren om in verschillende groepen te starten, wordt het herstelplan alleen voortgezet wanneer Azure alle VM's rapporteert als actief.
  • Herstelplannen worden nog steeds uitgevoerd, zelfs als een script mislukt.

Context herstelplan

Wanneer een script wordt uitgevoerd, wordt er een context voor het herstelplan aan het runbook geïnjecteerd. De context bevat de variabelen die in de tabel zijn samengevat.

Variabelenaam Beschrijving
RecoveryPlanName Naam van herstelplan. Wordt gebruikt in acties op basis van de naam.
FailoverType Hiermee geeft u op of het een test- of productiefailover is.
FailoverDirection Hiermee geeft u op of herstel naar een primaire of secundaire locatie is.
GroupID Identificeert het groepsnummer in het herstelplan wanneer het plan wordt uitgevoerd.
VmMap Een matrix van alle VM's in de groep.
VMMap-sleutel Een unieke sleutel (GUID) voor elke VIRTUELE machine.
SubscriptionId De Azure-abonnements-id waarin de VIRTUELE machine is gemaakt.
ResourceGroupName Naam van de resourcegroep waarin de VIRTUELE machine zich bevindt.
CloudServiceName De naam van de Azure-cloudservice waaronder de virtuele machine is gemaakt.
RoleName De naam van de Virtuele Azure-machine.
RecoveryPointId De tijdstempel voor het herstel van de VIRTUELE machine.

Notitie

De waarde voor variabele 'FailoverDirection' is 'PrimaryToSecondary' in het geval van failover en SecondaryToPrimary in het geval van failback.

In het volgende voorbeeld ziet u een contextvariabele:

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

Als u toegang wilt krijgen tot alle VM's in VMMap in een lus, kunt u de volgende code gebruiken:

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

Het blog van Aman Resourcea bij Harvesting Clouds heeft een nuttig voorbeeld van een contextscript voor een herstelplan.

Voordat u begint

  • Als u nog niet eerder met Azure Automation werkt, kunt u zich registreren en voorbeeldscripts downloaden. Zie Automation-runbooks: bekende problemen en beperkingen voor meer informatie.

  • Zorg ervoor dat het Automation-account de volgende modules heeft:

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

    Alle modules moeten compatibele versies hebben. De eenvoudigste manier is om altijd de nieuwste versies van alle modules te gebruiken.

Het herstelplan aanpassen

  1. Selecteer Herstelplannen (Site Recovery) in de kluis

  2. Als u een herstelplan wilt maken, selecteert u +Herstelplan. Meer informatie. Als u al een herstelplan hebt, selecteert u dit om het te openen.

  3. Selecteer Aanpassen op de pagina herstelplan.

    Select the Customize button

  4. Selecteer het beletselteken (...) naast groep 1: Begin>actie Toevoegen.

  5. Controleer in De actie Invoegen of Script is geselecteerd en geef een naam op voor het script (Hallo wereld).

  6. Geef een Automation-account op en selecteer een runbook. Selecteer OK om het script op te slaan. Het script wordt toegevoegd aan Groep 1: Na de stappen.

Een runbookscript opnieuw gebruiken

U kunt één runbookscript in meerdere herstelplannen gebruiken met behulp van externe variabelen.

  • U gebruikt Azure Automation-variabelen om parameters op te slaan voor het uitvoeren van een herstelplan.
  • Door de naam van het herstelplan toe te voegen als voorvoegsel aan de variabele, kunt u afzonderlijke variabelen maken voor elk herstelplan. Gebruik vervolgens de variabelen als parameters.
  • U kunt een parameter wijzigen zonder het script te wijzigen, maar toch de manier wijzigen waarop het script werkt.

Een eenvoudige tekenreeksvariabele gebruiken in een runbookscript

In dit voorbeeld gebruikt een script de invoer van een netwerkbeveiligingsgroep (NSG) en past dit toe op de VM's in een herstelplan.

  1. Gebruik deze context van het herstelplan zodat het script kan detecteren welk herstelplan wordt uitgevoerd:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    }
    
  2. Noteer de NSG-naam en resourcegroep. U gebruikt deze variabelen als invoer voor scripts voor herstelplannen.

  3. In de Assets van het Automation-account. maak een variabele voor het opslaan van de NSG-naam. Voeg een voorvoegsel toe aan de naam van de variabele met de naam van het herstelplan.

    Create an NSG name variable

  4. Maak een variabele voor het opslaan van de naam van de resourcegroep voor de NSG-resource. Voeg een voorvoegsel toe aan de naam van de variabele met de naam van het herstelplan.

    Create an NSG resource group name

  5. Gebruik in het script deze referentiecode om de variabelewaarden op te halen:

    Create an NSG resource group name

  6. Gebruik in het script deze referentiecode om de variabelewaarden op te halen:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  7. Gebruik de variabelen in het runbook om de NSG toe te passen op de netwerkinterface van de vm waarvoor een failover is uitgevoerd:

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

Maak voor elk herstelplan onafhankelijke variabelen, zodat u het script opnieuw kunt gebruiken. Voeg een voorvoegsel toe met behulp van de naam van het herstelplan.

Een complexe variabele gebruiken om meer informatie op te slaan

In sommige scenario's kunt u mogelijk geen afzonderlijke variabelen maken voor elk herstelplan. Overweeg een scenario waarin u één script wilt toewijzen aan een openbaar IP-adres op specifieke VM's. In een ander scenario wilt u mogelijk verschillende NSG's toepassen op verschillende VM's (niet op alle VM's). Opmerking:

  • U kunt een script dat herbruikbaar is voor elk herstelplan maken.
  • Elk herstelplan kan een variabel aantal VIRTUELE machines hebben.
  • Een SharePoint-herstel heeft bijvoorbeeld twee front-ends. Een LOB-toepassing (Line-Of-Business) heeft slechts één front-end.
  • In dit scenario kunt u geen afzonderlijke variabelen maken voor elk herstelplan.

In het volgende voorbeeld maken we een complexe variabele in het Azure Automation-account.

We doen dit door meerdere waarden op te geven met behulp van Azure PowerShell.

  1. Meld u in PowerShell aan bij uw Azure-abonnement:

    Connect-AzureRmAccount
    $sub = Get-AzureRmSubscription -Name <SubscriptionName>
    $sub | Select-AzureRmSubscription
    
  2. Als u de parameters wilt opslaan, maakt u de complexe variabele met behulp van de naam van het herstelplan:

    $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 deze complexe variabele is VMDetails de VM-id voor de beveiligde VM. Als u de VM-id wilt ophalen, bekijkt u de VM-eigenschappen in Azure Portal. In de volgende schermopname ziet u een variabele waarin de details van twee VM's worden opgeslagen:

    Use the VM ID as the GUID

  4. Gebruik deze variabele in uw runbook. Als de aangegeven VM-GUID wordt gevonden in de context van het herstelplan, past u de NSG toe op de VM:

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. Loop in uw runbook door de VM's van de context van het herstelplan. Controleer of de VIRTUELE machine in $VMDetailsObj bestaat. Als deze bestaat, opent u de eigenschappen van de variabele om de NSG toe te passen:

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

U kunt hetzelfde script gebruiken voor verschillende herstelplannen. Voer verschillende parameters in door de waarde op te slaan die overeenkomt met een herstelplan in verschillende variabelen.

Voorbeeldscripts

Als u voorbeeldscripts wilt implementeren in uw Automation-account, selecteert u de knop Implementeren in Azure .

Deploy to Azure

Volgende stappen