Menambahkan runbook Azure Automation ke rencana pemulihan

Artikel ini menjelaskan cara mengintegrasikan runbook Azure Automation, untuk memperluas rencana pemulihan Azure Site Recovery. Kami akan memperlihatkan cara mengotomatisasi tugas dasar yang jika tidak memerlukan intervensi manual, dan cara mengonversi pemulihan multi-langkah menjadi tindakan satu klik.

Rencana pemulihan

Anda dapat menggunakan rencana pemulihan saat gagal melewati mesin lokal, atau Azure VM. Rencana pemulihan membantu Anda menentukan proses pemulihan sistematis yang menentukan bagaimana mesin gagal, dan bagaimana mereka memulai dan pulih setelah kegagalan.

Pemulihan aplikasi besar bisa menjadi kompleks. Rencana pemulihan membantu memaksakan ketertiban sehingga pemulihan akurat, berulang, dan otomatis secara konsisten. Anda dapat mengotomatisasi tugas dalam rencana pemulihan menggunakan skrip, serta runbook Azure Automation. Contoh umum mungkin mengonfigurasi pengaturan pada Azure komputer virtual setelah kegagalan, atau mengonfigurasi ulang aplikasi yang berjalan di komputer virtual.

Runbook dalam rencana pemulihan

Anda menambahkan akun Azure Automation dan runbook ke rencana pemulihan. Runbook dipanggil ketika rencana pemulihan berjalan.

  • Akun Otomatisasi dapat berada di wilayah Azure mana pun, dan harus berada dalam langganan yang sama dengan vault Azure Site Recovery.
  • Runbook dapat berjalan dalam rencana pemulihan selama kegagalan dari lokasi utama ke lokasi kedua, atau selama failback dari lokasi kedua ke lokasi utama.
  • Runbook dalam rencana pemulihan berjalan secara serial, satu demi satu, dalam urutan yang ditetapkan.
  • Jika runbook dalam rencana pemulihan mengonfigurasi VM untuk memulai dalam grup yang berbeda, rencana pemulihan akan berlanjut hanya ketika Azure melaporkan semua VM yang sedang berjalan.
  • Rencana pemulihan terus berjalan, bahkan jika skrip gagal.

Konteks rencana pemulihan

Ketika skrip berjalan, itu menyuntikkan konteks rencana pemulihan ke runbook. Konteks berisi variabel yang dirangkum dalam tabel.

Nama variabel Keterangan
RecoveryPlanName Nama rencana pemulihan. Digunakan dalam tindakan berdasarkan nama.
FailoverType Menentukan apakah itu pengujian atau kegagalan produksi.
FailoverDirection Menentukan apakah pemulihan adalah ke lokasi utama atau lokasi kedua.
GroupId Mengidentifikasi nomor grup dalam rencana pemulihan saat rencana berjalan.
VmMap Array semua VM dalam grup.
Kunci VMMap Kunci unik (GUID) untuk setiap komputer virtual.
SubscriptionId ID langganan Azure tempat VM dibuat.
ResourceGroupName Nama grup sumber daya tempat VM berada.
CloudServiceName Nama layanan cloud Azure tempat VM dibuat.
RoleName Nama Azure VM.
RecoveryPointId Tanda waktu untuk pemulihan VM.

Catatan

Nilai untuk variabel 'FailoverDirection' akan menjadi 'PrimaryToSecondary' jika terjadi kegagalan dan 'SecondaryToPrimary' jika terjadi failback.

Contoh berikut menunjukkan variabel konteks:

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

Jika Anda ingin mengakses semua VM di VMMap dalam sebuah perulangan, Anda dapat menggunakan kode berikut:

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 di Harvesting Clouds memiliki contoh yang berguna dari skrip konteks rencana pemulihan.

Sebelum memulai

  • Jika Anda baru menggunakan Azure Automation, Anda dapat mendaftardanmengunduh contoh skrip. Untuk informasi selengkapnya, lihat Runbook Automation - masalah dan batasan yang diketahui.

  • Pastikan akun Azure Automation memiliki modul berikut:

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

    Semua modul harus dari versi yang kompatibel. Cara paling sederhana adalah selalu menggunakan versi terbaru dari semua modul.

Mengkustomisasi rencana pemulihan

  1. Di vault, pilih Rencana Pemulihan (Azure Site Recovery)

  2. Untuk membuat rencana pemulihan, pilih +Rencana Pemulihan. Pelajari selengkapnya. Jika Anda sudah memiliki rencana pemulihan, maka pilih untuk membukanya.

  3. Di halaman rencana pemulihan, pilih Kustomisasi.

    Select the Customize button

  4. Pilih elipsis (...) di samping Grup 1: Mulai>Tambahkan tindakan postingan.

  5. Dalam tindakan Sisipkan, verifikasi bahwa Skrip dipilih, dan tentukan nama untuk skrip (Halo Dunia).

  6. Tentukan akun automation dan pilih runbook. Untuk menyimpan skrip, pilih OK. Skrip ditambahkan ke Grup 1: Pasca-langkah.

Menggunakan kembali skrip runbook

Anda dapat menggunakan skrip runbook tunggal dalam beberapa rencana pemulihan, dengan menggunakan variabel eksternal.

  • Anda menggunakan variabel Azure Automation untuk menyimpan parameter untuk menjalankan rencana pemulihan.
  • Dengan menambahkan nama rencana pemulihan sebagai awalan variabel, Anda dapat membuat variabel individual untuk setiap rencana pemulihan. Kemudian, gunakan variabel sebagai parameter.
  • Anda dapat mengubah parameter tanpa mengubah skrip, tetapi masih bisa mengubah cara kerja skrip.

Menggunakan variabel string sederhana dalam skrip runbook

Dalam contoh ini, skrip mengambil input Network Security Group (NSG) dan menerapkannya ke VM dalam rencana pemulihan.

  1. Sehingga skrip dapat mendeteksi rencana pemulihan mana yang berjalan, gunakan konteks rencana pemulihan ini:

    workflow AddPublicIPAndNSG {
        param (
              [parameter(Mandatory=$false)]
              [Object]$RecoveryPlanContext
        )
    
        $RPName = $RecoveryPlanContext.RecoveryPlanName
    }
    
  2. Perhatikan nama NSG dan grup sumber daya. Anda menggunakan variabel ini sebagai input untuk skrip rencana pemulihan.

  3. Di aset akun Automation. buatlah variabel untuk menyimpan nama NSG. Tambahkan awalan ke nama variabel dengan nama rencana pemulihan.

    Create an NSG name variable

  4. Buatlah variabel untuk menyimpan nama grup sumber daya untuk sumber daya NSG. Tambahkan awalan ke nama variabel dengan nama rencana pemulihan.

    Create an NSG resource group name

  5. Dalam skrip, gunakan kode referensi ini untuk mendapatkan nilai variabel:

    Create an NSG resource group name

  6. Dalam skrip, gunakan kode referensi ini untuk mendapatkan nilai variabel:

    $NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG"
    $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG"
    
    $NSGnameVar = Get-AutomationVariable -Name $NSGValue
    $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
    
  7. Gunakan variabel dalam runbook untuk menerapkan NSG ke antarmuka jaringan VM yang gagal:

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

Untuk setiap rencana pemulihan, buatlah variabel independen sehingga Anda dapat menggunakan skrip kembali. Tambahkan awalan dengan menggunakan nama rencana pemulihan.

Menggunakan variabel kompleks untuk menyimpan informasi lebih lanjut

Dalam beberapa skenario, Anda mungkin tidak dapat membuat variabel terpisah untuk setiap rencana pemulihan. Pertimbangkan skenario di mana Anda ingin satu skrip untuk menetapkan alamat IP publik pada VM tertentu. Dalam skenario lain, Anda mungkin ingin menerapkan NSG yang berbeda pada VM yang berbeda (tidak pada semua VM). Perhatikan bahwa:

  • Anda dapat membuat skrip yang dapat digunakan kembali untuk rencana pemulihan apa pun.
  • Setiap rencana pemulihan dapat memiliki jumlah variabel VM.
  • Misalnya, pemulihan SharePoint memiliki dua ujung depan. Aplikasi lini bisnis dasar hanya memiliki satu front end.
  • Dalam skenario ini, Anda tidak dapat membuat variabel terpisah untuk setiap rencana pemulihan.

Dalam contoh berikut, kami membuat variabel kompleksdi akun Azure Automation.

Kami melakukan ini dengan menentukan beberapa nilai menggunakan Azure PowerShell.

  1. Di PowerShell, masuklah ke langganan Azure Anda:

    Connect-AzureRmAccount
    $sub = Get-AzureRmSubscription -Name <SubscriptionName>
    $sub | Select-AzureRmSubscription
    
  2. Untuk menyimpan parameter, buatlah variabel kompleks menggunakan nama rencana pemulihan:

    $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. Dalam variabel kompleks ini, Detail komputer virtual adalah ID komputer virtual untuk komputer virtual yang dilindungi. Untuk mendapatkan ID komputer virtual, di portal Microsoft Azure, lihat properti VM. Cuplikan layar berikut menunjukkan variabel yang menyimpan detail dua VM:

    Use the VM ID as the GUID

  4. Gunakan variabel ini di runbook Anda. Jika VM GUID yang ditunjukkan ditemukan dalam konteks rencana pemulihan, terapkan NSG pada VM:

    $VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
    
  5. Dalam runbook Anda, ulangi VM dari konteks rencana pemulihan. Periksa apakah VM ada di $VMDetailsObj. Jika ada, akseslah properti variabel untuk menerapkan NSG:

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

Anda dapat menggunakan skrip yang sama untuk rencana pemulihan yang berbeda. Masukkan parameter yang berbeda dengan menyimpan nilai yang sesuai dengan rencana pemulihan dalam variabel yang berbeda.

Skrip sampel

Untuk menyebarkan contoh skrip ke akun Automation Anda, pilih tombol Sebarkan ke Azure .

Deploy to Azure

Langkah berikutnya