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
Om du inte har använt Azure Automation tidigare kan du registrera dig och ladda ned exempelskript. Mer information finns i Automation-runbooks – kända problem och begränsningar.
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
I valvet väljer du Återställningsplaner (Site Recovery)
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.
På sidan återställningsplan väljer du Anpassa.
Välj ellipserna (...) bredvid Grupp 1: Starta åtgärden Lägg>till efter.
I Infoga-åtgärden kontrollerar du att Skript har valts och anger ett namn för skriptet (Hello World).
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.
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 }
Observera NSG-namnet och resursgruppen. Du använder dessa variabler som indata för återställningsplanskript.
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 variabel för att lagra resursgruppens namn för NSG-resursen. Lägg till ett prefix i variabelnamnet med namnet på återställningsplanen.
I skriptet använder du den här referenskoden för att hämta variabelvärdena:
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
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.
Logga in på din Azure-prenumeration i PowerShell:
Connect-AzureRmAccount $sub = Get-AzureRmSubscription -Name <SubscriptionName> $sub | Select-AzureRmSubscription
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
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 Portal och visar egenskaperna för den virtuella datorn. Följande skärmbild visar en variabel som lagrar information om två virtuella datorer:
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])
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 .
Nästa steg
- Läs mer om:
- Recension: