Потеря контекста после Suspend-Workflow
Ниже рабочий процесс в Azure Automation не работает. Работая на Hybrid Runbook Worker, я получаю:
- Контекст Azure правильно установлен и отображается
- Информация об объекте ВМ отображается правильно
- Рабочий процесс приостановлен
- Сразу после приостановки рабочий процесс возобновляется с использованием портала.
- Контекст Azure потерян, появляется ошибка
Запустите Login-AzureRmAccount для входа.
Выполнение того же на рабочем столе Azure показывает то же, что и выше, но приводит к сбою задания с ошибкой
Задание рабочего процесса не может быть возобновлено, потому что данные о сохранении не могут быть сохранены полностью, или сохраненные данные о постоянстве были повреждены. Вы должны перезапустить рабочий процесс. (Ключ недействителен для использования в указанном состоянии.)
workflow TestSub {
$SubscriptionName = Get-AutomationVariable -Name 'VAR-AUTO-SubscriptionName'
$AzureAutomationCredential = Get-AutomationPSCredential -Name 'CRE-AUTO-AutomationUser'
$AzureAccount = Add-AzureRmAccount -Credential $AzureAutomationCredential -SubscriptionName $SubscriptionName
Get-AzureRmContext
Get-AzureRmVM -ResourceGroupName AMS-CB-FELX-RG01 -Name li-felixc01
Suspend-Workflow
Get-AzureRmContext Get-AzureRmVM -ResourceGroupName AMS-CB-FELX-RG01 -Name li-felixc01
}
1 ответ
Из документов рабочего процесса Azure Automation PowerShell:
Поскольку учетные данные имени пользователя не сохраняются после вызова действия Suspend-Workflow или после последней контрольной точки, необходимо установить учетные данные равными нулю, а затем снова получить их из хранилища активов после вызова Suspend-Workflow или контрольной точки. В противном случае может появиться следующее сообщение об ошибке: Невозможно возобновить задание рабочего процесса, так как не удалось сохранить данные персистентности полностью или поврежденные данные персистентности. Вы должны перезапустить рабочий процесс.
Вот пример того, как сделать это правильно:
workflow CreateTestVms
{
$Cred = Get-AzureAutomationCredential -Name "MyCredential"
$null = Add-AzureRmAccount -Credential $Cred
$VmsToCreate = Get-AzureAutomationVariable -Name "VmsToCreate"
foreach ($VmName in $VmsToCreate)
{
# Do work first to create the VM (code not shown)
# Now add the VM
New-AzureRmVm -VM $Vm -Location "WestUs" -ResourceGroupName "ResourceGroup01"
# Checkpoint so that VM creation is not repeated if workflow suspends
$Cred = $null
Checkpoint-Workflow
$Cred = Get-AzureAutomationCredential -Name "MyCredential"
$null = Add-AzureRmAccount -Credential $Cred
}
}