Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как интегрировать модули runbook службы автоматизации Azure для расширения планов восстановления Azure Site Recovery. Мы покажем, как автоматизировать основные задачи, которые в противном случае выполняются вручную, и превратить многоэтапный процесс восстановление в действие, выполняемое одним щелчком.
Планы восстановления
Вы можете использовать планы восстановления при отработке аварии физических серверов или виртуальных машин Azure. Планы восстановления помогают определить систематический процесс восстановления, в котором указано, как происходит переключение на резервный сервер систем и как они запускаются и восстанавливаются после такого переключения.
Восстановление больших приложений может быть сложным. Планы восстановления помогают систематизировать действия, чтобы реализовать точное, воспроизводимое и автоматическое восстановление. Вы можете автоматизировать задачи в плане восстановления с помощью скриптов, а также модулей runbook службы автоматизации Azure. Типичными примерами могут быть настройка параметров на виртуальной машине Azure после срабатывания отказа или перенастройка приложения, которое работает на виртуальной машине.
- Узнайте подробнее о планах восстановления.
- Узнайте больше о модулях runbook службы автоматизации Azure.
Модули runbook в планах восстановления
Вы добавляете в план восстановления учетную запись службы автоматизации Azure и рабочие книги. Модуль runbook вызывается при выполнении плана восстановления.
- Учетная запись службы автоматизации может находиться в любом регионе Azure, но должна быть в той же подписке, что и хранилище Site Recovery.
- Модуль runbook может выполняться в плане восстановления во время отработки отказа из основного расположения в дополнительное или во время восстановления из дополнительного расположения в основное.
- Модули runbook в плане восстановления выполняются последовательно: один за другим в заданном порядке.
- Если модули runbook в плане восстановления настраивают виртуальные машины для запуска в разных группах, выполнение плана восстановления продолжится, только когда Azure сообщит, что все виртуальные машины запущены.
- Планы восстановления продолжают выполняться, даже если в скрипте возникает ошибка.
Контекст плана восстановления
При запуске скрипт внедряет в модуль "runbook" контекст для плана восстановления. Контекст содержит переменные, представленные в таблице ниже.
| Имя переменной | Description |
|---|---|
| ИмяПланаВосстановления | Имя плана восстановления. Используется в действиях на основе имени. |
| Тип резервного переключения | Указывает, является ли отработка отказа тестовой или рабочей. |
| FailoverDirection | Указывает, производится ли восстановление в основное или дополнительное расположение. |
| GroupID | Определяет номер группы в плане восстановления при запуске плана. |
| VmMap | Массив всех виртуальных машин в группе. |
| Ключ VMMap | Уникальный ключ (GUID) для каждой виртуальной машины. |
| Идентификатор подписки | Идентификатор подписки Azure, в которой создана виртуальная машина. |
| ResourceGroupName | Имя группы ресурсов, в которой находится виртуальная машина. |
| CloudServiceName | Имя облачной службы Azure, в которой создана виртуальная машина. |
| НазваниеРоли | Имя виртуальной машины 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, зарегистрируйтесь и скачайте примеры сценариев. Дополнительные сведения см. в разделе Работы по автоматизации — известные проблемы и ограничения.
Убедитесь, что в учетную запись службы автоматизации добавлены следующие модули.
- AzureRM.profile
- AzureRM.Resources
- AzureRM.Automation
- AzureRM.Network
- AzureRM.Compute
Все эти модули должны иметь совместимые версии. Самый простой способ — всегда использовать последние версии всех модулей.
Настройка плана восстановления
В хранилище выберите Планы восстановления (Site Recovery).
Чтобы создать план восстановления, выберите + План восстановления. Подробнее. Если у вас уже есть план восстановления, выберите его, чтобы открыть.
На странице плана восстановления выберите "Настроить".
Выберите многоточие (...) рядом с Группа 1: Начало>Добавить действие.
Убедитесь, что в поле Вставка действия выбран параметр Скрипт, и укажите имя скрипта (Hello World).
Укажите учетную запись автоматизации и выберите руководство по выполнению. Чтобы сохранить скрипт, нажмите кнопку "ОК". Сценарий добавлен в Группу 1: последующие действия.
Повторное использование скрипта runbook
Один и тот же скрипт runbook можно использовать в нескольких планах восстановления, передавая ему внешние переменные.
- Вы используете переменные Azure Automation для хранения параметров для выполнения плана восстановления системы.
- Если перед именем переменной вы укажете имя плана восстановления, для каждого плана восстановления будут созданы собственные переменные, Затем используйте переменные в качестве параметров.
- Эти параметры можно изменять, чтобы управлять работой скрипта, не изменяя его содержимое, однако принцип работы сценария будет изменен.
Использование простых строковых переменных в сценарии 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Используйте переменные в сценарии выполнения для применения 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 имеет два фронтенда. Типичное бизнес-приложение (LOB) имеет только один интерфейс.
- В этом сценарии нельзя создавать отдельные переменные для каждого плана восстановления.
В следующем примере мы создадим в учетной записи службы автоматизации 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-AzAutomationVariable -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 ".