Потеря контекста после Suspend-Workflow

Ниже рабочий процесс в Azure Automation не работает. Работая на Hybrid Runbook Worker, я получаю:

  1. Контекст Azure правильно установлен и отображается
  2. Информация об объекте ВМ отображается правильно
  3. Рабочий процесс приостановлен
  4. Сразу после приостановки рабочий процесс возобновляется с использованием портала.
  5. Контекст 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
     }
 }
Другие вопросы по тегам