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 förklarar hur du automatiserar grundläggande uppgifter som annars skulle kräva manuella åtgärder och hur du konverterar en återställning i flera steg till en åtgärd med ett enda klick.

Återställningsplaner

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

Å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 i en återställningsplan med hjälp av skript och Azure Automation-runbooks. Vanliga exempel kan vara att konfigurera inställningar på en virtuell Azure-dator efter redundansväxling eller konfigurera om en app som körs på den virtuella datorn.

Runbooks i återställningsplaner

Du lägger till ett 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 redundansväxling från en primär plats till sekundär, 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 efter en, i den angivna ordningen.
  • 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 matas en återställningsplanskontext in 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.
Redundanstyp Anger om det är ett test eller en produktionsredundans.
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 Azure-prenumerations-ID:t där den virtuella datorn skapades.
ResourceGroupName Namnet på resursgruppen 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ällningen av den virtuella datorn.

Kommentar

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

I följande exempel visas en kontextvariabel:

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

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

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

Innan du börjar

Anpassa återställningsplanen

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

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

  3. På sidan återställningsplan väljer du Anpassa.

    Select the Customize button

  4. Välj ellipserna (...) bredvid Grupp 1: Starta åtgärden Lägg>till efter.

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

  6. Ange ett automationskonto och välj en runbook. Spara skriptet genom att välja 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 använder 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 i 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 det på de virtuella datorerna i en återställningsplan.

  1. Så att skriptet kan identifiera vilken återställningsplan som körs använder du den här återställningsplanens kontext:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    }
    
  2. Observera 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.

    Create an NSG name variable

  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.

    Create an NSG resource group name

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

    Create an NSG resource group name

  6. 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
    
  7. Använd variablerna i runbooken för att tillämpa NSG på nätverksgränssnittet för den redundansbaserade virtuella datorn:

    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.

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

I vissa scenarier kanske du inte kan skapa separata variabler för varje återställningsplan. Överväg 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 skapa ett skript som kan återanvändas för alla återställningsplaner.
  • Varje återställningsplan kan ha ett variabelt antal virtuella datorer.
  • En SharePoint-återställning har till exempel två klientdelar. Ett grundläggande verksamhetsspecifikt program (LOB) har bara en klientdel.
  • 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-kontot.

Vi gör detta 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 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 VM-ID:t går du till Azure-portalen och visar egenskaperna för den virtuella datorn. Följande skärmbild visar en variabel som lagrar information om två virtuella datorer:

    Use the VM ID as the GUID

  4. Använd den här variabeln i din runbook. Om det angivna VM-GUID:et hittas 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:

        $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 väljer du knappen Distribuera till Azure .

Deploy to Azure

Nästa steg