Udostępnij za pośrednictwem


Dodawanie elementów Runbook usługi Azure Automation do planów odzyskiwania

W tym artykule opisano sposób integrowania elementów Runbook usługi Azure Automation w celu rozszerzenia planów odzyskiwania usługi Azure Site Recovery . Pokazujemy, jak zautomatyzować podstawowe zadania, które w przeciwnym razie wymagałyby ręcznej interwencji, oraz jak przekonwertować odzyskiwanie wieloetapowe w akcję pojedynczego kliknięcia.

Plany odzyskiwania

Plany odzyskiwania można używać podczas przełączania maszyn lokalnych w tryb failover lub maszyn wirtualnych platformy Azure. Plany odzyskiwania ułatwiają zdefiniowanie systematycznego procesu odzyskiwania, który definiuje sposób przełączania maszyn w tryb failover oraz sposobu ich uruchamiania i odzyskiwania po przejściu w tryb failover.

Odzyskiwanie dużych aplikacji może być złożone. Plany odzyskiwania pomagają narzucić kolejność, aby odzyskiwanie było spójnie dokładne, powtarzalne i zautomatyzowane. Zadania w ramach planu odzyskiwania można zautomatyzować przy użyciu skryptów, a także elementów Runbook usługi Azure Automation. Typowe przykłady mogą dotyczyć konfigurowania ustawień na maszynie wirtualnej platformy Azure po przejściu w tryb failover lub ponownej konfiguracji aplikacji działającej na maszynie wirtualnej.

Elementy Runbook w planach odzyskiwania

Do planu odzyskiwania dodaje się konto usługi Azure Automation i elementy Runbook. Element Runbook jest wywoływany po uruchomieniu planu odzyskiwania.

  • Konto usługi Automation może znajdować się w dowolnym regionie świadczenia usługi Azure i musi znajdować się w tej samej subskrypcji co magazyn usługi Site Recovery.
  • Element Runbook może działać w planie odzyskiwania podczas przechodzenia w tryb failover z lokalizacji podstawowej do pomocniczej lub podczas powrotu po awarii z lokalizacji pomocniczej do lokalizacji podstawowej.
  • Elementy Runbook w planie odzyskiwania są uruchamiane szeregowo, po kolei w kolejności ustawionej.
  • Jeśli elementy Runbook w planie odzyskiwania konfigurują maszyny wirtualne do uruchamiania w różnych grupach, plan odzyskiwania będzie kontynuowany tylko wtedy, gdy platforma Azure zgłasza wszystkie maszyny wirtualne jako uruchomione.
  • Plany odzyskiwania są nadal uruchamiane, nawet jeśli skrypt zakończy się niepowodzeniem.

Kontekst planu odzyskiwania

Po uruchomieniu skryptu wprowadza kontekst planu odzyskiwania do elementu Runbook. Kontekst zawiera zmienne podsumowane w tabeli.

Nazwa zmiennej Opis
RecoveryPlanName Nazwa planu odzyskiwania. Używane w akcjach na podstawie nazwy.
Typ trybu failover Określa, czy jest to test, czy produkcyjny tryb failover.
FailoverDirection Określa, czy odzyskiwanie ma być lokalizacją podstawową, czy pomocniczą.
Identyfikator grupy Określa numer grupy w planie odzyskiwania, gdy plan jest uruchomiony.
VmMap Tablica wszystkich maszyn wirtualnych w grupie.
Klucz vmMap Unikatowy klucz (GUID) dla każdej maszyny wirtualnej.
SubscriptionId Identyfikator subskrypcji platformy Azure, w którym utworzono maszynę wirtualną.
ResourceGroupName Nazwa grupy zasobów, w której znajduje się maszyna wirtualna.
CloudServiceName Nazwa usługi w chmurze platformy Azure, w ramach której utworzono maszynę wirtualną.
RoleName Nazwa maszyny wirtualnej platformy Azure.
Identyfikator punktu odzyskiwania Sygnatura czasowa odzyskiwania maszyny wirtualnej.

Uwaga

Wartość zmiennej "FailoverDirection" będzie mieć wartość "PrimaryToSecondary" w przypadku trybu failover i "SecondaryToPrimary" w przypadku powrotu po awarii.

W poniższym przykładzie przedstawiono zmienną kontekstową:

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

Jeśli chcesz uzyskać dostęp do wszystkich maszyn wirtualnych w pętli VMMap, możesz użyć następującego kodu:

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

Blog Aman Sharma na stronie Harvesting Clouds ma przydatny przykład skryptu kontekstu planu odzyskiwania.

Przed rozpoczęciem

  • Jeśli dopiero zaczynasz korzystać z usługi Azure Automation, możesz zarejestrować się i pobrać przykładowe skrypty. Aby uzyskać więcej informacji, zobacz Elementy Runbook usługi Automation — znane problemy i ograniczenia.

  • Upewnij się, że konto usługi Automation ma następujące moduły:

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

    Wszystkie moduły powinny być zgodne wersje. Najprostszym sposobem jest zawsze użycie najnowszych wersji wszystkich modułów.

Dostosowywanie planu odzyskiwania

  1. W magazynie wybierz pozycję Plany odzyskiwania (Site Recovery)

  2. Aby utworzyć plan odzyskiwania, wybierz pozycję +Plan odzyskiwania. Dowiedz się więcej. Jeśli masz już plan odzyskiwania, wybierz go, aby go otworzyć.

  3. Na stronie plan odzyskiwania wybierz pozycję Dostosuj.

    Wybierz przycisk Dostosuj

  4. Wybierz wielokropek (...) obok pozycji Grupa 1: Rozpocznij>akcję Dodaj wpis.

  5. W obszarze Akcja Wstaw sprawdź, czy wybrano skrypt, i określ nazwę skryptu (Hello World).

  6. Określ konto automatyzacji i wybierz element Runbook. Aby zapisać skrypt, wybierz przycisk OK. Skrypt jest dodawany do grupy 1: kroki po kroku.

Ponowne używanie skryptu elementu Runbook

Można użyć pojedynczego skryptu elementu Runbook w wielu planach odzyskiwania przy użyciu zmiennych zewnętrznych.

  • Zmienne usługi Azure Automation służą do przechowywania parametrów na potrzeby uruchamiania planu odzyskiwania.
  • Dodając nazwę planu odzyskiwania jako prefiks do zmiennej, można utworzyć poszczególne zmienne dla każdego planu odzyskiwania. Następnie użyj zmiennych jako parametrów.
  • Możesz zmienić parametr bez zmiany skryptu, ale nadal zmienić sposób działania skryptu.

Używanie prostej zmiennej ciągu w skrycie elementu Runbook

W tym przykładzie skrypt pobiera dane wejściowe sieciowej grupy zabezpieczeń i stosuje ją do maszyn wirtualnych w planie odzyskiwania.

  1. Aby skrypt mógł wykryć, który plan odzyskiwania jest uruchomiony, użyj tego kontekstu planu odzyskiwania:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    }
    
  2. Zanotuj nazwę sieciowej grupy zabezpieczeń i grupę zasobów. Te zmienne są używane jako dane wejściowe dla skryptów planu odzyskiwania.

  3. W zasobach konta usługi Automation. utwórz zmienną do przechowywania nazwy sieciowej grupy zabezpieczeń. Dodaj prefiks do nazwy zmiennej o nazwie planu odzyskiwania.

    Tworzenie zmiennej nazwy sieciowej grupy zabezpieczeń

  4. Utwórz zmienną do przechowywania nazwy grupy zasobów dla zasobu sieciowej grupy zabezpieczeń. Dodaj prefiks do nazwy zmiennej o nazwie planu odzyskiwania.

    Tworzenie nazwy grupy zasobów sieciowej grupy zabezpieczeń

  5. W skry skryptzie użyj tego kodu referencyjnego, aby uzyskać wartości zmiennych:

    Tworzenie nazwy grupy zasobów sieciowej grupy zabezpieczeń

  6. W skry skryptzie użyj tego kodu referencyjnego, aby uzyskać wartości zmiennych:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  7. Użyj zmiennych w elemecie Runbook, aby zastosować sieciową grupę zabezpieczeń do interfejsu sieciowego maszyny wirtualnej w trybie failover:

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

Dla każdego planu odzyskiwania utwórz niezależne zmienne, aby można było ponownie użyć skryptu. Dodaj prefiks przy użyciu nazwy planu odzyskiwania.

Przechowywanie dodatkowych informacji przy użyciu zmiennej złożonej

W niektórych scenariuszach może nie być możliwe utworzenie oddzielnych zmiennych dla każdego planu odzyskiwania. Rozważmy scenariusz, w którym pojedynczy skrypt ma przypisać publiczny adres IP na określonych maszynach wirtualnych. W innym scenariuszu można zastosować różne sieciowe grupy zabezpieczeń na różnych maszynach wirtualnych (nie na wszystkich maszynach wirtualnych). Należy pamiętać, że:

  • Możesz utworzyć skrypt wielokrotnego użytku dla dowolnego planu odzyskiwania.
  • Każdy plan odzyskiwania może mieć zmienną liczbę maszyn wirtualnych.
  • Na przykład odzyskiwanie programu SharePoint ma dwa frontony. Podstawowa aplikacja biznesowa (LOB) ma tylko jeden fronton.
  • W tym scenariuszu nie można utworzyć oddzielnych zmiennych dla każdego planu odzyskiwania.

W poniższym przykładzie utworzymy złożoną zmienną na koncie usługi Azure Automation.

W tym celu należy określić wiele wartości przy użyciu programu Azure PowerShell.

  1. W programie PowerShell zaloguj się do subskrypcji platformy Azure:

    Connect-AzureRmAccount
    $sub = Get-AzureRmSubscription -Name <SubscriptionName>
    $sub | Select-AzureRmSubscription
    
  2. Aby zapisać parametry, utwórz zmienną złożoną przy użyciu nazwy planu odzyskiwania:

    $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. W tej złożonej zmiennej vmDetails jest identyfikatorem maszyny wirtualnej chronionej maszyny wirtualnej. Aby uzyskać identyfikator maszyny wirtualnej, w witrynie Azure Portal wyświetl właściwości maszyny wirtualnej. Poniższy zrzut ekranu przedstawia zmienną, która przechowuje szczegóły dwóch maszyn wirtualnych:

    Użyj identyfikatora maszyny wirtualnej jako identyfikatora GUID

  4. Użyj tej zmiennej w elemecie Runbook. Jeśli wskazany identyfikator GUID maszyny wirtualnej zostanie znaleziony w kontekście planu odzyskiwania, zastosuj sieciową grupę zabezpieczeń na maszynie wirtualnej:

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. W elemecie Runbook wykonaj pętlę przez maszyny wirtualne kontekstu planu odzyskiwania. Sprawdź, czy maszyna wirtualna istnieje w $VMDetailsObj. Jeśli istnieje, uzyskaj dostęp do właściwości zmiennej, aby zastosować sieciową grupę zabezpieczeń:

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

Możesz użyć tego samego skryptu dla różnych planów odzyskiwania. Wprowadź różne parametry, przechowując wartość odpowiadającą planowi odzyskiwania w różnych zmiennych.

Przykładowe skrypty

Aby wdrożyć przykładowe skrypty na koncie usługi Automation, wybierz przycisk Wdróż na platformie Azure .

Wdróż na platformie Azure

Następne kroki