Kurtarma planlarına Azure Otomasyonu runbook’ları ekleme

Bu makalede, Azure Otomasyonu runbook 'larının Azure Site Recovery kurtarma planlarını uzatmak için nasıl tümleştirileceği açıklanır. Bunun için el ile müdahale etmesi gereken temel görevleri otomatikleştirmeyi ve çok adımlı bir kurtarmanın tek tıklamayla bir eyleme nasıl dönüştürüleceğini göstereceğiz.

Kurtarma planları

Şirket içi makinelerin veya Azure VM 'lerinin yükünü devretmek için kurtarma planlarını kullanabilirsiniz. Kurtarma planları, makinelerin yük devretme işlemini ve yük devretmeden sonra nasıl başlatılacağını ve kurtarılacağını tanımlayan sistematik bir kurtarma işlemi tanımlamanıza yardımcı olur.

Kurtarma büyük uygulamaları karmaşık olabilir. Kurtarma planları, kurtarmanın sürekli doğru, yinelenebilir ve otomatik olmasını sağlayacak şekilde sıra sağlamaya yardımcı olur. Komut dosyalarını ve Azure Otomasyonu runbook 'larını kullanarak bir kurtarma planı içindeki görevleri otomatikleştirebilirsiniz. Tipik örnekler, yük devretmeden sonra Azure VM üzerinde ayarları veya VM üzerinde çalışan bir uygulamayı yeniden yapılandırmayı yapılandırıyor olabilir.

Kurtarma planlarındaki runbook 'lar

Bir kurtarma planına Azure Otomasyonu hesabı ve Runbook 'lar eklersiniz. Kurtarma planı çalıştırıldığında runbook çağrılır.

  • Otomasyon hesabı herhangi bir Azure bölgesinde olabilir ve Site Recovery kasasıyla aynı abonelikte olmalıdır.
  • Bir runbook, birincil konumdan ikinciye yük devretme sırasında veya ikincil konumdan birincil konuma yeniden çalışma sırasında bir kurtarma planında çalıştırılabilir.
  • Bir kurtarma planındaki runbook 'lar, bir diğeri sonra, küme sırasına göre çalıştırılır.
  • Kurtarma planındaki runbook 'lar VM 'Leri farklı gruplarda başlatılacak şekilde yapılandırdıysanız, kurtarma planı yalnızca Azure tüm VM 'Leri çalışıyor olarak raporladığında devam eder.
  • Kurtarma planları, bir komut dosyası başarısız olsa bile çalışmaya devam eder.

Kurtarma planı bağlamı

Bir betik çalıştırıldığında, runbook 'a bir kurtarma planı bağlamını çıkarır. Bağlam, tabloda özetlenen değişkenleri içerir.

Değişken adı Açıklama
RecoveryPlanName Kurtarma planı adı. Ada göre eylemlerde kullanılır.
Yük üzerine yazma Bir test veya üretim yük devretmesi olup olmadığını belirtir.
FailoverDirection Kurtarmanın birincil veya ikincil bir konuma yapılıp yapılmayacağını belirtir.
ID Plan çalışırken kurtarma planındaki grup numarasını tanımlar.
VmMap Gruptaki tüm VM 'lerin bir dizisi.
VMMap anahtarı Her VM için benzersiz bir anahtar (GUID).
SubscriptionId VM 'nin oluşturulduğu Azure abonelik KIMLIĞI.
ResourceGroupName VM 'nin bulunduğu kaynak grubunun adı.
CloudServiceName VM 'nin altında oluşturulduğu Azure bulut hizmeti adı.
RoleName Azure VM 'nin adı.
Recoverypointıd VM kurtarma için zaman damgası.

Not

' FailoverDirection ' değişkeninin değeri, yük devretme ve yeniden çalışma durumunda ' SecondaryToPrimary ' olması durumunda ' PrimaryToSecondary ' olacaktır.

Aşağıdaki örnek bir bağlam değişkenini gösterir:

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

Bir döngüde VMMap içindeki tüm VM 'Lere erişmek istiyorsanız aşağıdaki kodu kullanabilirsiniz:

$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 parçalara ayırma bulutlarının üzerinde bir kurtarma planı bağlam betiğininyararlı bir örneği vardır.

Başlamadan önce

  • Azure Otomasyonu ' na yeni başladıysanız örnek komut dosyalarını kaydedebilir ve indirebilirsiniz.

  • Otomasyon hesabının aşağıdaki modüllere sahip olduğundan emin olun:

    • Azurerd. profil
    • AzureRM.Resources
    • AzureRM.Automation
    • AzureRM.Network
    • AzureRM.Compute

    Tüm modüller uyumlu sürümler olmalıdır. En basit yol, her zaman tüm modüllerin en son sürümlerini kullanmaktır.

Kurtarma planını özelleştirme

  1. Kasada, kurtarma planları ' nı (Site Recovery) seçin

  2. Bir kurtarma planı oluşturmak için + kurtarma planı' na tıklayın. Daha fazla bilgi edinin. Zaten bir kurtarma planınız varsa, açmak için seçin.

  3. Kurtarma planı sayfasında, Özelleştir' e tıklayın.

    Özelleştir düğmesine tıklayın

  4. Grup 1' in yanındaki üç nokta (...) işaretine tıklayın: > Post Ekle eylemi Başlat.

  5. Ekle eyleminde betiğin seçili olduğunu doğrulayın ve betik için bir ad belirtin (Merhaba Dünya).

  6. Bir Otomasyon hesabı belirtin ve bir runbook seçin. Betiği kaydetmek için Tamam' a tıklayın. Komut dosyası 1. Grup: son adımlar' a eklenir.

Runbook betiğini yeniden kullanma

Çoklu kurtarma planlarında, dış değişkenleri kullanarak tek bir runbook betiği kullanabilirsiniz.

  • Bir kurtarma planını çalıştırmaya yönelik parametreleri depolamak için Azure Otomasyonu değişkenlerini kullanırsınız.
  • Kurtarma planı adını değişkenine önek olarak ekleyerek her bir kurtarma planı için bağımsız değişkenler oluşturabilirsiniz. Sonra değişkenleri parametre olarak kullanın.
  • Betiği değiştirmeden bir parametreyi değiştirebilirsiniz, ancak yine de betiğin çalışma şeklini değiştirebilirsiniz.

Runbook betikte basit bir dize değişkeni kullanma

Bu örnekte, bir komut dosyası bir ağ güvenlik grubu (NSG) girişi alır ve bunu bir kurtarma planındaki VM 'lere uygular.

  1. Komut dosyasının hangi kurtarma planının çalıştığını algılayabilmesi için, bu kurtarma planı bağlamını kullanın:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    
  2. NSG adı ve kaynak grubu ' na göz önünde edin. Bu değişkenleri, kurtarma planı betikleri için giriş olarak kullanırsınız.

  3. Otomasyon hesabı varlıkları. NSG adını depolamak için bir değişken oluşturun. Kurtarma planının adı ile değişken adına bir ön ek ekleyin.

    NSG ad değişkeni oluşturma

  4. NSG kaynağı için kaynak grubu adını depolamak üzere bir değişken oluşturun. Kurtarma planının adı ile değişken adına bir ön ek ekleyin.

    NSG kaynak grubu adı oluşturma

  5. Betikte, değişken değerlerini almak için bu başvuru kodunu kullanın:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  6. NSG 'yi, yük devredilen VM 'nin ağ arabirimine uygulamak için Runbook 'taki değişkenleri kullanı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
        }
    }
    

Her kurtarma planı için, betiği yeniden kullanabilmeniz için bağımsız değişkenler oluşturun. Kurtarma planı adını kullanarak bir ön ek ekleyin.

Bu senaryoya yönelik tam, uçtan uca bir betik için bu betiğigözden geçirin.

Daha fazla bilgi depolamak için karmaşık bir değişken kullanın

Bazı senaryolarda her kurtarma planı için ayrı değişkenler oluşturamayabileceksiniz. Tek bir betiğin belirli VM'lerde genel IP adresi ataması istediğiniz bir senaryo düşünün. Başka bir senaryoda, farklı VM'lere (tüm VM'lerde değil) farklı NSG'ler uygulamak istiyor olabilir. Şunlara dikkat edin:

  • Herhangi bir kurtarma planı için yeniden kullanılabilir bir betik değiştirilebilir.
  • Her kurtarma planında farklı sayıda VM olabilir.
  • Örneğin, bir kurtarma SharePoint ön uçları olur. Temel bir iş hattı (LOB) uygulamasında yalnızca bir ön uç vardır.
  • Bu senaryoda, her kurtarma planı için ayrı değişkenler oluşturamayebilirsiniz.

Aşağıdaki örnekte, hesapta karmaşık bir değişken Azure Otomasyonu oluşturuz.

Bunu, birden çok değer belirterek, Azure PowerShell.

  1. PowerShell'de Azure aboneliğinde oturum açma:

    Connect-AzureRmAccount
    $sub = Get-AzureRmSubscription -Name <SubscriptionName>
    $sub | Select-AzureRmSubscription
    
  2. Parametreleri depolamak için kurtarma planının adını kullanarak karmaşık değişkeni oluşturun:

    $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. Bu karmaşık değişkende VMDetails, korumalı VM'nin VM kimliğidir. VM kimliğini almak için, Azure portal VM özelliklerini görüntüleme. Aşağıdaki ekran görüntüsünde iki VM'nin ayrıntılarını depoleyen bir değişken yer almaktadır:

    VM Kimliğini GUID olarak kullanma

  4. Runbook'uzda bu değişkeni kullanın. Belirtilen VM GUID'si kurtarma planı bağlamında bulunursa VM'ye NSG'yi uygulama:

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. Runbook'uzda kurtarma planı bağlamının VM'leri boyunca döngüye geçin. Sanal makinenin içinde olup olmadığını $VMDetailsObj. Varsa, NSG'yi uygulamak için değişkeninin özelliklerine erişin:

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

Farklı kurtarma planları için aynı betiği kullanabilirsiniz. Bir kurtarma planına karşılık gelen değeri farklı değişkenlerde depolayarak farklı parametreler girin.

Örnek betikler

Otomasyon hesabınıza örnek betikler dağıtmak için Azure'a Dağıt düğmesine tıklayın.

Azure’a dağıtın

Bu video başka bir örnek sağlar. İki katmanlı bir WordPress uygulamasını Azure'a kurtarmayı gösteriyor:

Sonraki adımlar