Přidání runbooků Azure Automation do plánů obnovení

Tento článek popisuje, jak integrovat runbooky Azure Automation za účelem rozšíření plánů obnovení Azure Site Recovery . Ukážeme vám, jak automatizovat základní úlohy, které by jinak vyžadovaly ruční zásah, a jak z vícekrokového obnovení udělat akci na jedno kliknutí.

Plány obnovení

Plány obnovení můžete použít při převzetí služeb při selhání místních počítačů nebo virtuálních počítačů Azure. Plány obnovení vám pomůžou definovat systematický proces obnovení, který definuje způsob převzetí služeb při selhání počítačů a způsob jejich spuštění a obnovení po převzetí služeb při selhání.

Obnovení velkých aplikací může být složité. Plány obnovení pomáhají stanovit pořadí, aby bylo obnovení konzistentně přesné, opakovatelné a automatizované. Úlohy v rámci plánu obnovení můžete automatizovat pomocí skriptů a runbooků Azure Automation. Typické příklady můžou být konfigurace nastavení na virtuálním počítači Azure po převzetí služeb při selhání nebo změna konfigurace aplikace spuštěné na virtuálním počítači.

Runbooky v plánech obnovení

Do plánu obnovení přidáte účet Azure Automation a runbooky. Runbook se vyvolá při spuštění plánu obnovení.

  • Účet Automation může být v libovolné oblasti Azure a musí být ve stejném předplatném jako trezor Site Recovery.
  • Runbook může běžet v plánu obnovení během převzetí služeb při selhání z primárního umístění do sekundárního nebo během navrácení služeb po obnovení ze sekundárního umístění do primárního.
  • Runbooky v plánu obnovení běží sériově, jeden po druhém, v nastaveném pořadí.
  • Pokud runbooky v plánu obnovení konfigurují virtuální počítače tak, aby se spouštěly v různých skupinách, plán obnovení bude pokračovat jenom v případě, že Azure hlásí všechny virtuální počítače jako spuštěné.
  • Plány obnovení se budou dál spouštět, i když skript selže.

Kontext plánu obnovení

Když se skript spustí, vloží do runbooku kontext plánu obnovení. Kontext obsahuje proměnné shrnuté v tabulce.

Název proměnné Popis
RecoveryPlanName Název plánu obnovení Používá se v akcích založených na názvu.
Typ převzetí služeb při selhání Určuje, jestli se jedná o testovací nebo produkční převzetí služeb při selhání.
FailoverDirection Určuje, jestli je obnovení do primárního nebo sekundárního umístění.
Groupid Identifikuje číslo skupiny v plánu obnovení, když je plán spuštěný.
Vmmap Pole všechvirtuálních
Klíč mapy virtuálního počítače Jedinečný klíč (GUID) pro každý virtuální počítač.
SubscriptionId ID předplatného Azure, ve kterém byl virtuální počítač vytvořen.
ResourceGroupName Název skupiny prostředků, ve které se nachází virtuální počítač.
Název služby CloudServiceName Název cloudové služby Azure, pod kterým byl virtuální počítač vytvořen.
RoleName (Název role) Název virtuálního počítače Azure
RecoveryPointId Časové razítko pro obnovení virtuálního počítače.

Poznámka:

Hodnota proměnné FailoverDirection bude v případě převzetí služeb při selhání a SecondaryToPrimary v případě navrácení služeb po obnovení primární.

Následující příklad ukazuje kontextovou proměnnou:

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

Pokud chcete získat přístup ke všem virtuálním počítačům ve smyčce VMMap, můžete použít následující kód:

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 Sharma blog over at Chytá clouds má užitečný příklad kontextového skriptu plánu obnovení.

Než začnete

Přizpůsobení plánu obnovení

  1. V trezoru vyberte Plány obnovení (Site Recovery)

  2. Pokud chcete vytvořit plán obnovení, vyberte +Plán obnovení. Další informace. Pokud už máte plán obnovení, vyberte ho a otevřete ho.

  3. Na stránce plánu obnovení vyberte Přizpůsobit.

    Select the Customize button

  4. Vyberte tři tečky (...) vedle skupiny 1: Spustit>akci přidat příspěvek.

  5. V akci Vložit ověřte, že je vybraný skript , a zadejte název skriptu (Hello World).

  6. Zadejte účet Automation a vyberte runbook. Pokud chcete skript uložit, vyberte OK. Skript se přidá do skupiny 1: Po krocích.

Opakované použití skriptu runbooku

Pomocí externích proměnných můžete použít jeden skript runbooku v několika plánech obnovení.

  • Proměnné Azure Automation slouží k ukládání parametrů pro spuštění plánu obnovení.
  • Přidáním názvu plánu obnovení jako předpony proměnné můžete pro každý plán obnovení vytvořit jednotlivé proměnné. Pak proměnné použijte jako parametry.
  • Parametr můžete změnit beze změny skriptu, ale přesto změnit způsob, jakým skript funguje.

Použití jednoduché řetězcové proměnné ve skriptu runbooku

V tomto příkladu skript vezme vstup skupiny zabezpečení sítě (NSG) a použije ho na virtuální počítače v plánu obnovení.

  1. Aby skript mohl zjistit, který plán obnovení je spuštěný, použijte tento kontext plánu obnovení:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    }
    
  2. Poznamenejte si název skupiny zabezpečení sítě a skupinu prostředků. Tyto proměnné použijete jako vstupy pro skripty plánu obnovení.

  3. V prostředcích účtu Automation. vytvořte proměnnou pro uložení názvu skupiny zabezpečení sítě. Přidejte předponu k názvu proměnné s názvem plánu obnovení.

    Create an NSG name variable

  4. Vytvořte proměnnou pro uložení názvu skupiny prostředků pro prostředek NSG. Přidejte předponu k názvu proměnné s názvem plánu obnovení.

    Create an NSG resource group name

  5. Ve skriptu použijte tento referenční kód k získání hodnot proměnných:

    Create an NSG resource group name

  6. Ve skriptu použijte tento referenční kód k získání hodnot proměnných:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  7. Pomocí proměnných v runbooku použijte skupinu zabezpečení sítě na síťové rozhraní virtuálního počítače s převzetím služeb při selhání:

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

Pro každý plán obnovení vytvořte nezávislé proměnné, abyste mohli skript znovu použít. Přidejte předponu pomocí názvu plánu obnovení.

Použití komplexní proměnné k uložení dalších informací

V některých scénářích možná nebudete moct vytvořit samostatné proměnné pro každý plán obnovení. Představte si scénář, ve kterém chcete, aby jeden skript přiřadil veřejnou IP adresu na konkrétních virtuálních počítačích. V jiném scénáři můžete chtít použít různé skupiny zabezpečení sítě na různých virtuálních počítačích (ne na všech virtuálních počítačích). Poznámky:

  • Můžete vytvořit skript, který je opakovaně použitelný pro jakýkoli plán obnovení.
  • Každý plán obnovení může mít proměnlivý počet virtuálních počítačů.
  • Obnovení SharePointu má například dva front-endy. Základní obchodní aplikace (LOB) má pouze jeden front-end.
  • V tomto scénáři nemůžete vytvořit samostatné proměnné pro každý plán obnovení.

V následujícím příkladu vytvoříme komplexní proměnnou v účtu Azure Automation.

Provedeme to zadáním více hodnot pomocí Azure PowerShellu.

  1. V PowerShellu se přihlaste ke svému předplatnému Azure:

    Connect-AzureRmAccount
    $sub = Get-AzureRmSubscription -Name <SubscriptionName>
    $sub | Select-AzureRmSubscription
    
  2. Pokud chcete parametry uložit, vytvořte komplexní proměnnou s použitím názvu plánu obnovení:

    $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. V této složité proměnné je VMDetails ID virtuálního počítače chráněného virtuálního počítače. Id virtuálního počítače získáte tak, že na webu Azure Portal zobrazíte vlastnosti virtuálního počítače. Následující snímek obrazovky ukazuje proměnnou, která ukládá podrobnosti o dvou virtuálních počítačích:

    Use the VM ID as the GUID

  4. Tuto proměnnou použijte v runbooku. Pokud se v kontextu plánu obnovení najde uvedený identifikátor GUID virtuálního počítače, použijte na virtuálním počítači skupinu zabezpečení sítě:

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. V runbooku projděte virtuální počítače kontextu plánu obnovení. Zkontrolujte, jestli virtuální počítač existuje v $VMDetailsObj. Pokud existuje, přejděte k vlastnostem proměnné a použijte skupinu zabezpečení sítě:

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

Stejný skript můžete použít pro různé plány obnovení. Zadejte různé parametry uložením hodnoty, která odpovídá plánu obnovení v různých proměnných.

Ukázkové skripty

Pokud chcete do svého účtu Automation nasadit ukázkové skripty, vyberte tlačítko Nasadit do Azure .

Deploy to Azure

Další kroky