Добавление модулей Runbook службы автоматизации Azure в планы восстановления
В этой статье объясняется, как интегрировать модули runbook службы автоматизации Azure для расширения планов восстановления Azure Site Recovery. Мы покажем, как автоматизировать основные задачи, которые в противном случае выполняются вручную, и превратить многоэтапный процесс восстановление в действие, выполняемое одним щелчком.
Планы восстановления
Вы можете использовать планы восстановления при отработки отказа локальных компьютеров или виртуальных машин Azure. Планы восстановления помогают выработать системный процесс восстановления, в котором определено, как происходит отработка отказа компьютеров и как они запускаются и восстанавливаются после такой отработки.
Восстановление больших приложений может быть сложным. Планы восстановления помогают систематизировать действия, чтобы реализовать точное, воспроизводимое и автоматическое восстановление. Вы можете автоматизировать задачи в плане восстановления с помощью скриптов, а также модулей runbook службы автоматизации Azure. Типовыми примерами могут быть настройка параметров на виртуальной машине Azure после отработки отказа или перенастройка приложения, которое работает на виртуальной машине.
- Узнайте подробнее о планах восстановления.
- Узнайте больше о модулях runbook службы автоматизации Azure.
Модули runbook в планах восстановления
В план восстановления добавляются учетная запись службы автоматизации Azure и модули runbook. Модуль runbook вызывается при выполнении плана восстановления.
- Учетная запись службы автоматизации может находиться в любом регионе Azure, но должна быть в той же подписке, что и хранилище Site Recovery.
- Модуль runbook может выполняться в плане восстановления во время отработки отказа из основного расположения в дополнительное или во время восстановления из дополнительного расположения в основное.
- Модули runbook в плане восстановления выполняются последовательно: один за другим в заданном порядке.
- Если модули runbook в плане восстановления настраивают виртуальные машины для запуска в разных группах, выполнение плана восстановления продолжится, только когда Azure сообщит, что все виртуальные машины запущены.
- Планы восстановления продолжают выполняться, даже если в скрипте возникает ошибка.
Контекст плана восстановления
При запуске скрипт внедряет в модуль runbook контекст плана восстановления. Контекст содержит переменные, представленные в таблице ниже.
Имя переменной | Description |
---|---|
RecoveryPlanName | Имя плана восстановления. Используется в действиях на основе имени. |
FailoverType | Указывает, является ли отработка отказа тестовой или рабочей. |
FailoverDirection | Указывает, производится ли восстановление в основное или дополнительное расположение. |
GroupID | Определяет номер группы в плане восстановления при выполнении плана. |
VmMap | Массив всех виртуальных машин в группе. |
Ключ VMMap | Уникальный ключ (GUID) для каждой виртуальной машины. |
SubscriptionId | Идентификатор подписки Azure, в которой создана виртуальная машина. |
ResourceGroupName | Имя группы ресурсов, в которой находится виртуальная машина. |
CloudServiceName | Имя облачной службы Azure, в которой создана виртуальная машина. |
RoleName | Имя виртуальной машины Azure. |
RecoveryPointId | Метка времени восстановления виртуальной машины. |
Примечание.
Значение переменной FailoverDirection будет PrimaryToSecondary в случае отработки отказа и SecondaryToPrimary в случае восстановления.
Ниже приведен пример того, как выглядит переменная контекста.
{
"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 в цикле, можно использовать следующий код:
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) на платформе Harvesting Clouds есть полезный пример скрипта контекста плана восстановления.
Перед началом работы
Если вы еще не знакомы со службой автоматизации Azure, зарегистрируйтесь и скачайте примеры сценариев. Дополнительные сведения см. в разделе Модули Runbook службы автоматизации — известные проблемы и ограничения.
Убедитесь, что в учетную запись службы автоматизации добавлены следующие модули.
- AzureRM.profile
- AzureRM.Resources
- AzureRM.Automation
- AzureRM.Network
- AzureRM.Compute
Все эти модули должны иметь совместимые версии. Самый простой способ — всегда использовать последние версии всех модулей.
Настройка плана восстановления
В хранилище выберите Recovery Plans (Site Recovery) (Планы восстановления, Site Recovery).
Чтобы создать план восстановления, выберите + План восстановления. Подробнее. Если у вас уже есть план восстановления, выберите его, чтобы открыть.
На странице плана восстановления выберите "Настроить".
Выберите многоточие (...) рядом с группой 1. Запустите действие "Добавить>запись".
Убедитесь, что в поле Вставка действия выбран параметр Скрипт, и укажите имя скрипта (Hello World).
Укажите учетную запись службы автоматизации и выберите runbook. Чтобы сохранить скрипт, нажмите кнопку "ОК". Сценарий будет добавлен в группу Группа 1: последующие действия.
Повторное использование скрипта runbook
Один и тот же скрипт runbook можно использовать в нескольких планах восстановления, передавая ему внешние переменные.
- Переменные службы автоматизации Azure используются для хранения параметров для запуска плана восстановления.
- Если перед именем переменной вы укажете имя плана восстановления, для каждого плана восстановления будут созданы собственные переменные, которые можно использовать в качестве параметров.
- Эти параметры можно изменять, чтобы управлять работой скрипта, не изменяя его содержимое, однако принцип работы сценария будет изменен.
Использование простых строковых переменных в сценарии Runbook
Рассмотрим скрипт, который принимает входные данные группы безопасности сети (NSG) и применяет их к виртуальным машинам в плане восстановления.
Чтобы определить для скрипта текущий выполняемый план восстановления, используйте контекст плана восстановления.
workflow AddPublicIPAndNSG { param ( [parameter(Mandatory=$false)] [Object]$RecoveryPlanContext ) $RPName = $RecoveryPlanContext.RecoveryPlanName }
Запишите имя NSG и группы ресурсов. Используйте эти переменные в качестве входных данных для сценариев плана восстановления.
В ресурсах учетной записи службы автоматизации: Создайте переменную для хранения имени NSG. В качестве префикса добавьте перед ней имя плана восстановления.
Создайте переменную для хранения имени группы ресурсов NSG. В качестве префикса добавьте перед ней имя плана восстановления.
В скрипте извлеките значения этих переменных, используя следующий код:
В скрипте извлеките значения этих переменных, используя следующий код:
$NSGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSG" $NSGRGValue = $RecoveryPlanContext.RecoveryPlanName + "-NSGRG" $NSGnameVar = Get-AutomationVariable -Name $NSGValue $RGnameVar = Get-AutomationVariable -Name $NSGRGValue
Используйте переменные в модуле Runbook, что позволит применить NSG к сетевому интерфейсу виртуальной машины, для которой выполняется отработка отказа.
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 } }
Для каждого плана восстановления создайте независимые переменные, чтобы скрипт можно было использовать повторно. Перед именами переменных добавьте имя плана восстановления.
Использование сложной переменной для хранения дополнительных сведений
В некоторых случаях создание отдельных переменных для каждого плана восстановления может оказаться невозможным. Рассмотрим ситуацию, когда один скрипт должен назначать общедоступный IP-адрес на определенных виртуальных машинах. Этот же подход будет полезен, если нужно применить разные группы безопасности сети для нескольких (но не всех) виртуальных машин. Обратите внимание на следующие условия.
- Такой скрипт можно многократно использовать для других планов восстановления.
- Каждый план восстановления может иметь разное число виртуальных машин.
- Например, точка восстановления SharePoint имеет два внешних интерфейса, а простые бизнес-приложения — только один.
- В этом сценарии нельзя создавать отдельные переменные для каждого плана восстановления.
В следующем примере мы создадим в учетной записи службы автоматизации Azure сложную переменную
Для этого нужно указать несколько значений с помощью Azure PowerShell.
Используя PowerShell, войдите в свою подписку Azure.
Connect-AzureRmAccount $sub = Get-AzureRmSubscription -Name <SubscriptionName> $sub | Select-AzureRmSubscription
Создайте сложную переменную для хранения параметров, присвоив ей имя плана восстановления.
$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
В этой сложной переменной параметр VMDetails содержит идентификатор защищенной виртуальной машины. Этот идентификатор указан в свойствах виртуальной машины на портале Azure. На снимке экрана ниже показано, что мы создали переменную для хранения сведений о двух виртуальных машинах.
Используйте эту переменную в модуле runbook. Если указанный GUID виртуальной машины находится в контексте плана восстановления, примените группу NSG к виртуальной машине.
$VMDetailsObj = (Get-AutomationVariable -Name $RecoveryPlanContext.RecoveryPlanName).ToObject([hashtable])
В модуле Runbook выполните циклический перебор виртуальных машин, входящих в контекст плана восстановления, проверяя наличие этих виртуальных машин в $VMDetailsObj. Если встречается совпадение, примените группу 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 } }
Этот же сценарий можно использовать с разными планами восстановления, сохраняя в разных переменных значения параметров, применимых для соответствующих планов восстановления.
Примеры сценариев
Чтобы развернуть примеры сценариев в учетной записи службы автоматизации, нажмите кнопку "Развернуть в Azure ".
Следующие шаги
- Дополнительные сведения:
- Обзор:
- Может потребоваться выполнить несколько задач во время аварийного восстановления Azure Site Recovery.