Lägga till Azure Automation Runbook-rutiner i återställningsplaner

Den här artikeln beskriver hur du integrerar Azure Automation runbooks för att utöka Azure Site Recovery återställningsplaner. Vi visar hur du automatiserar grundläggande uppgifter som annars skulle behöva manuella åtgärder och hur du konverterar en återställning i flera steg till en åtgärd med en enda klickning.

Återställningsplaner

Du kan använda återställningsplaner när du redundans redundansar lokala datorer eller virtuella Azure-datorer. Återställningsplaner hjälper dig att definiera en systematisk återställningsprocess som definierar hur datorer redundansar och hur de startar och återställs efter redundans.

Återställning av stora appar kan vara komplex. Återställningsplaner hjälper till att införa ordning så att återställningen är konsekvent korrekt, repeterbar och automatiserad. Du kan automatisera uppgifter inom en återställningsplan med hjälp av skript, samt Azure Automation runbooks. Vanliga exempel kan vara att konfigurera inställningar på en virtuell Azure-dator efter redundans, eller att konfigurera om en app som körs på den virtuella datorn.

Runbooks i återställningsplaner

Du lägger till Azure Automation-konto och runbooks i en återställningsplan. Runbooken anropas när återställningsplanen körs.

  • Automation-kontot kan finnas i valfri Azure-region och måste finnas i samma prenumeration som Site Recovery valvet.
  • En runbook kan köras i en återställningsplan under redundans från en primär plats till en sekundär plats eller under återställning efter fel från den sekundära platsen till den primära.
  • Runbooks i en återställningsplan körs seriellt, en i tur och ordning.
  • Om runbooks i en återställningsplan konfigurerar virtuella datorer att starta i olika grupper fortsätter återställningsplanen endast när Azure rapporterar att alla virtuella datorer körs.
  • Återställningsplaner fortsätter att köras, även om ett skript misslyckas.

Kontext för återställningsplan

När ett skript körs matar det in en återställningsplankontext i runbooken. Kontexten innehåller variablerna som sammanfattas i tabellen.

Variabelnamn Beskrivning
RecoveryPlanName Namn på återställningsplan. Används i åtgärder baserat på namnet.
FailoverType Anger om det är ett test eller en produktions-redundans.
FailoverDirection Anger om återställningen är till en primär eller sekundär plats.
Groupid Identifierar gruppnumret i återställningsplanen när planen körs.
VmMap En matris med alla virtuella datorer i gruppen.
VMMap-nyckel En unik nyckel (GUID) för varje virtuell dator.
SubscriptionId Det Azure-prenumerations-ID som den virtuella datorn skapades i.
ResourceGroupName Namnet på den resursgrupp där den virtuella datorn finns.
CloudServiceName Namnet på Azure-molntjänsten som den virtuella datorn skapades under.
RoleName Namnet på den virtuella Azure-datorn.
RecoveryPointId Tidsstämpeln för återställning av den virtuella datorn.

Anteckning

Värdet för variabeln "FailoverDirection" blir "PrimaryToSecondary" vid redundans och "SecondaryToPrimary" vid återställning efter fel.

I följande exempel visas en sammanhangsvariabel:

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

Om du vill komma åt alla virtuella datorer i VMMap i en loop kan du använda följande kod:

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

Aman Scriptas blogg över på Harvesting Clouds har ett användbart exempel på ett kontextskript för en återställningsplan.

Innan du börjar

  • Om du inte har Azure Automation kan du registrera dig och ladda ned exempelskript.

  • Kontrollera att Automation-kontot har följande moduler:

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

    Alla moduler ska ha kompatibla versioner. Det enklaste sättet är att alltid använda de senaste versionerna av alla moduler.

Anpassa återställningsplanen

  1. I valvet väljer du Återställningsplaner (Site Recovery)

  2. Om du vill skapa en återställningsplan klickar du på +Återställningsplan. Läs mer. Om du redan har en återställningsplan väljer du att öppna den.

  3. På sidan återställningsplan klickar du på Anpassa.

    Klicka på knappen Anpassa

  4. Klicka på ellipserna (...) bredvid Grupp 1: Starta åtgärden Lägg till > post.

  5. I Infoga-åtgärden kontrollerar du att Skript har valts och anger ett namn för skriptet (Hello World).

  6. Ange ett Automation-konto och välj en runbook. Spara skriptet genom att klicka på OK. Skriptet läggs till i Grupp 1: Efter steg.

Återanvända ett Runbook-skript

Du kan använda ett enda Runbook-skript i flera återställningsplaner med hjälp av externa variabler.

  • Du kan Azure Automation variabler för att lagra parametrar för att köra en återställningsplan.
  • Genom att lägga till namnet på återställningsplanen som ett prefix till variabeln kan du skapa enskilda variabler för varje återställningsplan. Använd sedan variablerna som parametrar.
  • Du kan ändra en parameter utan att ändra skriptet, men ändå ändra hur skriptet fungerar.

Använda en enkel strängvariabel i ett runbook-skript

I det här exemplet tar ett skript indata från en nätverkssäkerhetsgrupp (NSG) och tillämpar den på de virtuella datorerna i en återställningsplan.

  1. Använd den här kontexten för återställningsplanen så att skriptet kan identifiera vilken återställningsplan som körs:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    
  2. Anteckna NSG-namnet och resursgruppen. Du använder dessa variabler som indata för återställningsplanskript.

  3. I Automation-kontots tillgångar. skapa en variabel för att lagra NSG-namnet. Lägg till ett prefix i variabelnamnet med namnet på återställningsplanen.

    Skapa en NSG-namnvariabel

  4. Skapa en variabel för att lagra resursgruppens namn för NSG-resursen. Lägg till ett prefix i variabelnamnet med namnet på återställningsplanen.

    Skapa ett NSG-resursgruppnamn

  5. I skriptet använder du den här referenskoden för att hämta variabelvärdena:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  6. Använd variablerna i runbooken för att tillämpa NSG på nätverksgränssnittet för den virtuella datorn som har problem:

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

Skapa oberoende variabler för varje återställningsplan så att du kan återanvända skriptet. Lägg till ett prefix med hjälp av namnet på återställningsplanen.

Ett fullständigt, heltäckande skript för det här scenariot finns i det här skriptet.

Använda en komplex variabel för att lagra mer information

I vissa fall kanske du inte kan skapa separata variabler för varje återställningsplan. Tänk dig ett scenario där du vill att ett enda skript ska tilldela en offentlig IP-adress på specifika virtuella datorer. I ett annat scenario kanske du vill tillämpa olika NSG:er på olika virtuella datorer (inte på alla virtuella datorer). Tänk på följande:

  • Du kan göra ett skript som kan återanvändas för alla återställningsplaner.
  • Varje återställningsplan kan ha ett variabelt antal virtuella datorer.
  • Till exempel har SharePoint en återställning två frontend-delar. Ett grundläggande LOB-program (Line-of-Business) har bara en frontend.
  • I det här scenariot kan du inte skapa separata variabler för varje återställningsplan.

I följande exempel skapar vi en komplex variabel i Azure Automation konto.

Det gör vi genom att ange flera värden med hjälp av Azure PowerShell.

  1. Logga in på din Azure-prenumeration i PowerShell:

    Connect-AzureRmAccount
    $sub = Get-AzureRmSubscription -Name <SubscriptionName>
    $sub | Select-AzureRmSubscription
    
  2. Om du vill lagra parametrarna skapar du den komplexa variabeln med hjälp av namnet på återställningsplanen:

    $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. I den här komplexa variabeln är VMDetails VM-ID:t för den skyddade virtuella datorn. Om du vill hämta DET virtuella dator-ID:t går Azure Portal du egenskaperna för den virtuella datorn. Följande skärmbild visar en variabel som lagrar information om två virtuella datorer:

    Använd DET virtuella dator-ID:t som GUID

  4. Använd den här variabeln i din runbook. Om det angivna VM-GUID:t finns i återställningsplanens kontext tillämpar du NSG:n på den virtuella datorn:

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. I din runbook loopar du igenom de virtuella datorerna i återställningsplanens kontext. Kontrollera om den virtuella datorn finns i $VMDetailsObj. Om den finns får du åtkomst till egenskaperna för variabeln för att tillämpa NSG:n:

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

Du kan använda samma skript för olika återställningsplaner. Ange olika parametrar genom att lagra värdet som motsvarar en återställningsplan i olika variabler.

Exempelskript

Om du vill distribuera exempelskript till ditt Automation-konto klickar du på knappen Distribuera till Azure.

Distribuera till Azure

Den här videon innehåller ett annat exempel. Den visar hur du återställer ett WordPress-program med två nivåer till Azure:

Nästa steg