Kurtarma planlarına Azure Otomasyonu runbook’ları ekleme

Bu makalede, Azure Site Recovery kurtarma planlarını genişletmek için Azure Otomasyonu runbook'ları tümleştirme işlemi açıklanır. Normalde el ile yapmanız gereken temel görevleri nasıl otomatikleştireceğinizi ve çok aşamalı bir kurtarma işlemini tek tıklamayla nasıl tamamlayacağınızı göstereceğiz.

Kurtarma planları

Şirket içi makinelerde veya Azure VM'lerinde yük devretme yaparken kurtarma planlarını kullanabilirsiniz. Kurtarma planları, makinelerin yük devretme şeklini ve yük devretme sonrasında nasıl başlatılıp kurtarıldığını tanımlayan sistematik bir kurtarma işlemi tanımlamanıza yardımcı olur.

Büyük uygulamaların kurtarılması karmaşık olabilir. Kurtarma planları, kurtarmanın tutarlı bir şekilde doğru, yinelenebilir ve otomatik olması için sıra uygulanmasına yardımcı olur. Betikleri ve Azure Otomasyonu runbook'ları kullanarak kurtarma planındaki görevleri otomatikleştirebilirsiniz. Tipik örnekler, yük devretmeden sonra Azure VM'sinde ayarları yapılandırmak veya VM'de çalışan bir uygulamayı yeniden yapılandırmak olabilir.

Kurtarma planlarındaki runbook'lar

Kurtarma planına bir 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.
  • Runbook, birincil konumdan ikincil konuma yük devretme sırasında veya ikincil konumdan birincil konuma yeniden çalışma sırasında kurtarma planında çalışabilir.
  • Kurtarma planındaki runbook'lar seri olarak, sırayla, birbiri ardına çalıştırılır.
  • Kurtarma planındaki runbook'lar VM'leri farklı gruplarda başlatılacak şekilde yapılandırırsa, kurtarma planı yalnızca Azure tüm VM'leri çalışıyor olarak bildirdiğinde devam eder.
  • Bir betik başarısız olsa bile kurtarma planları çalışmaya devam ediyor.

Kurtarma planı bağlamı

Betik çalıştırıldığında runbook'a bir kurtarma planı bağlamı ekler. 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 Devretme Türü Bunun bir test mi yoksa üretim yük devretmesi mi olduğunu belirtir.
Yük DevretmeDirection Kurtarmanın birincil konuma mı yoksa ikincil konuma mı olduğunu belirtir.
Groupıd Plan çalışırken kurtarma planındaki grup numarasını tanımlar.
VmMap Gruptaki tüm VM'lerin 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 oluşturulduğu Azure bulut hizmeti adı.
RoleName Azure VM'sinin adı.
RecoveryPointId VM kurtarma için zaman damgası.

Not

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

Aşağıdaki örnekte bir bağlam değişkeni gösterilmektedir:

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

VMMap'teki tüm VM'lere döngü içinde erişmek istiyorsanız aşağıdaki kodu kullanabilirsiniz:

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'nın Harvesting Clouds'taki blogu, kurtarma planı bağlam betiğinin yararlı bir örneğine sahiptir.

Başlamadan önce

  • Azure Otomasyonu yeniyseniz kaydolabilir ve örnek betikleri indirebilirsiniz. Daha fazla bilgi için bkz . Otomasyon runbook'ları - bilinen sorunlar ve sınırlamalar.

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

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

    Tüm modüller uyumlu sürümlerde 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ı (Site Recovery) öğesini seçin

  2. 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'i seçin.

    Select the Customize button

  4. Grup 1: Gönderi ekleme eylemini başlat'ın>yanındaki üç noktayı (...) seçin.

  5. Ekle eyleminde Betik'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'ı seçin. Betik, Grup 1: Son adımlar'a eklenir.

Runbook betiğini yeniden kullanma

Dış değişkenleri kullanarak birden çok kurtarma planında tek bir runbook betiği kullanabilirsiniz.

  • Kurtarma planı çalıştırmaya yönelik parametreleri depolamak için Azure Otomasyonu değişkenleri kullanırsınız.
  • Kurtarma planı adını değişkene ön ek olarak ekleyerek, her kurtarma planı için bağımsız değişkenler oluşturabilirsiniz. Ardından 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 betiğinde basit bir dize değişkeni kullanma

Bu örnekte, bir betik bir Ağ Güvenlik Grubu'nun (NSG) girişini alır ve bunu bir kurtarma planındaki VM'lere uygular.

  1. Betiğin hangi kurtarma planının çalıştığını algılaması için şu kurtarma planı bağlamını kullanın:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    }
    
  2. NSG adını ve kaynak grubunu not edin. Bu değişkenleri kurtarma planı betikleri için giriş olarak kullanırsınız.

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

    Create an NSG name variable

  4. NSG kaynağının kaynak grubu adını depolamak için bir değişken oluşturun. Değişken adına kurtarma planının adıyla bir ön ek ekleyin.

    Create an NSG resource group name

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

    Create an NSG resource group name

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

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  7. NSG'yi yük devretme sanal makinesinin 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.

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

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

  • Herhangi bir kurtarma planı için yeniden kullanılabilir bir betik oluşturabilirsiniz.
  • Her kurtarma planında değişken sayıda VM olabilir.
  • Örneğin, SharePoint kurtarmanın iki ön ucu vardır. Temel bir iş kolu (LOB) uygulamasının yalnızca bir ön ucu vardır.
  • Bu senaryoda, her kurtarma planı için ayrı değişkenler oluşturamazsınız.

Aşağıdaki örnekte, Azure Otomasyonu hesabında karmaşık bir değişken oluşturacağız.

Bunu, Azure PowerShell kullanarak birden çok değer belirterek yaparız.

  1. PowerShell'de Azure aboneliğinizde oturum açın:

    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ında VM özelliklerini görüntüleyin. Aşağıdaki ekran görüntüsünde iki VM'nin ayrıntılarını depolayan bir değişken gösterilmektedir:

    Use the VM ID as the GUID

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

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. Runbook'unuzda kurtarma planı bağlamının VM'leri arasında döngü yapın. VM'nin $VMDetailsObj olup olmadığını denetleyin. Varsa, değişkenin özelliklerine erişerek NSG'yi uygulayın:

        $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. Kurtarma planına karşılık gelen değeri farklı değişkenlerde depolayarak farklı parametreler girin.

Örnek betikler

Örnek betikleri Otomasyon hesabınıza dağıtmak için Azure'a Dağıt düğmesini seçin.

Deploy to Azure

Sonraki adımlar