Hinzufügen von Azure Automation-Runbooks zu Wiederherstellungsplänen

In diesem Artikel wird beschrieben, wie Sie Azure Automation-Runbooks integrieren, um Wiederherstellungspläne für Azure Site Recovery zu erweitern. Wir zeigen Ihnen, wie Sie einfache Tasks automatisieren, für die zuvor ein manueller Eingriff erforderlich war, und eine aus mehreren Schritten bestehende Wiederherstellung in eine Aktion konvertieren, die sich mit nur einem Klick durchführen lässt.

Wiederherstellungspläne

Sie können Wiederherstellungspläne verwenden, wenn Sie ein Failover für lokale Computer oder Azure-VMs durchführen. Mithilfe von Wiederherstellungsplänen können Sie einen systematischen Wiederherstellungsprozess definieren, der vorgibt, wie Computer Failover durchführen und nach einem Failover gestartet und wiederhergestellt werden.

Die Wiederherstellung großer Apps kann komplex sein. Darüber hinaus tragen Wiederherstellungspläne zu einem geregelten Prozess bei, sodass die Wiederherstellung immer exakt, wiederholbar und automatisiert ist. Sie können Tasks innerhalb eines Wiederherstellungsplans mithilfe von Skripts und Azure Automation-Runbooks automatisieren. Typische Beispiele sind u. a. das Konfigurieren von Einstellungen auf einer Azure-VM nach einem Failover oder das Neukonfigurieren einer App, die auf der VM ausgeführt wird.

Runbooks in Wiederherstellungsplänen

Sie können einem Wiederherstellungsplan ein Azure Automation-Konto und Runbooks hinzufügen. Das Runbook wird aufgerufen, wenn der Wiederherstellungsplan ausgeführt wird.

  • Ein Automation-Konto kann sich in einer beliebigen Azure-Region befinden, aber es muss unter demselben Abonnement wie der Site Recovery-Tresor laufen.
  • Ein Runbook kann während eines Failovers von einem primären auf einen sekundären Standort oder beim Failback vom sekundären auf den primären Standort in einem Wiederherstellungsplan ausgeführt werden.
  • Runbooks in einem Wiederherstellungsplan werden nacheinander in einer festgelegten Reihenfolge ausgeführt.
  • Wenn Runbooks in einem Wiederherstellungsplan VMs so konfigurieren, dass sie in unterschiedlichen Gruppen gestartet werden, wird der Wiederherstellungsplan nur fortgesetzt, wenn Azure meldet, dass alle VMs ausgeführt werden.
  • Auch wenn ein Skript fehlschlägt, werden die Wiederherstellungspläne weiter ausgeführt.

Kontext für Wiederherstellungspläne

Wenn ein Skript ausgeführt wird, wird ein Kontext für den Wiederherstellungsplan zum Runbook hinzugefügt. Der Kontext enthält die Variablen, die in der folgenden Tabelle zusammengefasst sind.

Variablenname Beschreibung
RecoveryPlanName Name des Wiederherstellungsplans. Wird in Aktionen verwendet, die auf dem Namen basieren.
FailoverType Gibt an, ob es sich um ein Test- oder Produktionsfailover handelt.
FailoverDirection Gibt an, ob die Wiederherstellung auf einem primären oder sekundären Standort durchgeführt wird.
GroupID Identifiziert die Gruppennummer innerhalb des Wiederherstellungsplans, wenn der Plan ausgeführt wird.
VmMap Ein Array mit allen VMs der Gruppe.
VMMap-Schlüssel Ein eindeutiger Schlüssel (GUID) für jeden virtuellen Computer.
SubscriptionId Die ID des Azure-Abonnements, unter dem die VM erstellt wurde.
ResourceGroupName Name der Ressourcengruppe, in der sich die VM befindet.
CloudServiceName Der Name des Azure-Clouddiensts, unter dem die VM erstellt wurde.
RoleName Der Name der Azure-VM.
RecoveryPointId Der Zeitstempel für die Wiederherstellung der VM.

Hinweis

Der Wert der Variable „FailoverDirection“ ist „PrimaryToSecondary“ bei einem Failover und „SecondaryToPrimary“ bei einem Failback.

Im folgenden Beispiel wird eine Kontextvariable angezeigt:

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

Wenn Sie auf alle VMs in VMMap in einer Schleife zugreifen möchten, können Sie den folgenden Code verwenden:

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

In Aman Sharmas Blog auf Harvesting Clouds finden Sie ein nützliches Beispiel für ein Kontextskript für einen Wiederherstellungsplan.

Vorbereitung

  • Wenn Sie mit Azure Automation noch nicht vertraut sind, können Sie sich registrieren und Beispielskripts herunterladen. Weitere Informationen finden Sie unter Automation-Runbooks – bekannte Probleme und Einschränkungen.

  • Stellen Sie sicher, dass das Automation-Konto über die folgenden Module verfügt:

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

    Alle Module sollten auf kompatiblen Versionen basieren. Am einfachsten ist es, immer die neuste Version aller Module zu verwenden.

Anpassen des Wiederherstellungsplans

  1. Wählen Sie im Tresor Recovery Plans (Site Recovery) (Wiederherstellungspläne (Site Recovery)) aus.

  2. Wenn Sie einen Wiederherstellungsplan erstellen möchten, wählen Sie +Wiederherstellungsplan aus. Weitere Informationen Wenn Sie bereits über einen Wiederherstellungsplan verfügen, öffnen Sie diesen.

  3. Wählen Sie auf der Seite „Wiederherstellungsplan“ die Option Anpassen aus.

    Auswählen der Schaltfläche „Anpassen“

  4. Wählen Sie die Auslassungspunkte (...) neben Gruppe 1: Start>Nachfolgende Aktion hinzufügen aus.

  5. Überprüfen Sie unter Aktion einfügen, ob die Option Skript ausgewählt ist, und geben Sie einen Namen für das Skript an (Hallo Welt).

  6. Geben Sie ein Automation-Konto an, und wählen Sie ein Runbook aus. Wählen Sie OK aus, um das Skript zu speichern. Das Skript wird Gruppe 1: Schritte danach hinzugefügt.

Wiederverwenden eines Runbookskripts

Sie können ein einzelnes Runbookskript in mehreren Wiederherstellungsplänen nutzen, indem Sie externe Variablen verwenden.

  • Sie können Azure Automation-Variablen zum Speichern von Parametern für die Ausführung eines Wiederherstellungsplans verwenden.
  • Indem Sie der Variablen den Namen des Wiederherstellungsplans als Präfix hinzufügen, können Sie für jeden Wiederherstellungsplan einzelne Variablen erstellen. Verwenden Sie die Variablen anschließend als Parameter.
  • Sie können einen Parameter ändern, ohne das Skript zu ändern, und für die Funktionsweise des Skripts trotzdem eine Änderung erzielen.

Verwenden einer einfachen Zeichenfolgenvariablen in einem Runbookskript

In diesem Beispiel wendet ein Skript die Eingabe einer Netzwerksicherheitsgruppe (NSG) auf die VMs eines Wiederherstellungsplans an.

  1. Verwenden Sie den Kontext für den Wiederherstellungsplan, damit das Skript erkennt, welcher Wiederherstellungsplan ausgeführt wird:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    }
    
  2. Notieren Sie sich den NSG-Namen und die Ressourcengruppe. Verwenden Sie diese Variablen als Eingaben für Skripts für Wiederherstellungspläne.

  3. Erstellen Sie in den Objekten des Automation-Kontos eine Variable zum Speichern des NSG-Namens. Fügen Sie dem Variablennamen ein Präfix hinzu, indem Sie den Namen des Wiederherstellungsplans verwenden.

    Erstellen einer Variablen für den NSG-Namen

  4. Erstellen Sie eine Variable, um den Namen der Ressourcengruppe für die NSG-Ressource zu speichern. Fügen Sie dem Variablennamen ein Präfix hinzu, indem Sie den Namen des Wiederherstellungsplans verwenden.

    Erstellen des Namens einer NSG-Ressourcengruppe

  5. Verwenden Sie im Skript den folgenden Referenzcode, um die Variablenwerte abzurufen:

    Erstellen des Namens einer NSG-Ressourcengruppe

  6. Verwenden Sie im Skript den folgenden Referenzcode, um die Variablenwerte abzurufen:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  7. Verwenden Sie die Variablen im Runbook, um die NSG auf die Netzwerkschnittstelle der VM anzuwenden, für den das Failover durchgeführt wurde:

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

Erstellen Sie für jeden Wiederherstellungsplan unabhängige Variablen, damit Sie das Skript wiederverwenden können. Fügen Sie ein Präfix hinzu, indem Sie den Namen des Wiederherstellungsplans verwenden.

Verwenden einer komplexen Variablen zum Speichern von weiteren Informationen

In einigen Szenarios können Sie möglicherweise keine separaten Variablen für jeden Wiederherstellungsplan erstellen. Stellen Sie sich ein Szenario vor, bei dem mit nur einem Skript für bestimmte VMs eine öffentliche IP-Adresse zugewiesen werden soll. In einem anderen Szenario kann es sein, dass Sie verschiedene NSGs unterschiedlichen VMs (nicht auf allen VMs) zuordnen möchten. Beachten Sie dabei Folgendes:

  • Sie können ein Skript erstellen, das für alle Wiederherstellungspläne wiederverwendet werden kann.
  • Jeder Wiederherstellungsplan kann über eine variable Anzahl von VMs verfügen.
  • Eine SharePoint-Wiederherstellung verfügt über zwei Front-Ends. Eine einfache Branchenanwendung (LOB-Anwendung) hat nur ein Front-End.
  • In diesem Szenario können Sie nicht für jeden Wiederherstellungsplan separate Variablen erstellen.

Im folgenden Beispiel erstellen wie eine komplexe Variable im Azure Automation-Konto.

Hierzu geben wir mithilfe von Azure PowerShell mehrere Werte an.

  1. Melden Sie sich in PowerShell bei Ihrem Azure-Abonnement an:

    Connect-AzureRmAccount
    $sub = Get-AzureRmSubscription -Name <SubscriptionName>
    $sub | Select-AzureRmSubscription
    
  2. Erstellen Sie zum Speichern der Parameter die komplexe Variable, indem Sie den Namen des Wiederherstellungsplans verwenden:

    $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 dieser komplexen Variablen ist VMDetails die VM-ID für die geschützte VM. Zeigen Sie im Azure-Portal die VM-Eigenschaften an, um die VM-ID zu erhalten. Im folgenden Screenshot ist eine Variable dargestellt, in der die Details von zwei VMs gespeichert werden:

    Verwenden der VM-ID als GUID

  4. Verwenden Sie diese Variable in Ihrem Runbook. Wenn sich die angegebene VM-GUID im Kontext des Wiederherstellungsplans befindet, können Sie die NSG auf die VM anwenden:

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. Führen Sie in Ihrem Runbook eine Schleife durch die VMs des Wiederherstellungsplan-Kontexts durch. Überprüfen Sie, ob die VM in $VMDetailsObj vorhanden ist. Wenn ja, greifen Sie auf die Eigenschaften der Variablen zu, um die NSG anzuwenden:

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

Sie können dasselbe Skript für unterschiedliche Wiederherstellungspläne verwenden. Geben Sie unterschiedliche Parameter ein, indem Sie den Wert, der einem Wiederherstellungsplan entspricht, in unterschiedlichen Variablen speichern.

Beispielskripts

Wählen Sie die Schaltfläche In Azure bereitstellen aus, um Beispielskripts für Ihr Automation-Konto bereitzustellen.

Bereitstellung in Azure

Nächste Schritte