Контекст подписки для совместного использования заданий службы автоматизации Azure

У меня есть модуль Runbook службы автоматизации Azure, который запускает дочерний модуль Runbook для каждой подписки.

foreach ($sub in $subscriptions)
{
    $ChildRunbookInputParams = @{"SubscriptionId"="$($sub.SubscriptionId)"}

    $job = Start-AzureRmAutomationRunbook `
            -Name $ChildRunbookName `
            -Parameters $ChildRunbookInputParams `
            -ResourceGroupName $AutomationAccountResourceGroup `
            -AutomationAccountName $AutomationAccountName 
}

И родительский, и дочерний модули Runbook используют одну и ту же учетную запись запуска от имени.

Проблема, с которой я сталкиваюсь, заключается в том, что кажется, что модули Runbook совместно используют контексты, хотя они работают как независимые задания.
Родительский модуль Runbook выполняет Set-AzureRmContext подписку, содержащую учетную запись автоматизации, чтобы она могла Start-AzureRmAutomationRunbook. Дочерний модуль Runbook выполняет Set-AzureRmContext переданный ему идентификатор подписки, чтобы он мог обрабатывать ресурсы в этой подписке.
После запуска первого дочернего модуля Runbook последующие Start-AzureRmAutomationRunbook вызовы в родительском модуле Runbook завершаются сбоем, поскольку он больше не может найти указанный модуль Runbook . И по мере запуска дополнительных дочерних модулей Runbook (родительский модуль Runbook запускает несколько дочерних заданий до того, как первое из них изменяет подписки), ранее запущенные дочерние задания начинают обрабатывать ресурсы для последней подписки.

Это ожидаемое поведение? Работа с несколькими подписками кажется обычным требованием; какой рекомендуемый шаблон для этого?


person BenV    schedule 20.09.2016    source источник
comment
Связанный элемент отзыва: feedback.azure. ru / forum / 246290-automation / questions /   -  person BenV    schedule 23.05.2017
comment
Связанная проблема с GitHub: github.com/Azure/azure-powershell/issues/1257   -  person BenV    schedule 23.05.2017


Ответы (1)


Мы также столкнулись с этой проблемой, и для ее решения нам пришлось обратиться в службу поддержки Microsoft. Возможно, это стало возможным только с сентября 2017 г., когда модули / командлеты Azure PowerShell начали поддерживать возможность передачи профиля (контекст AzureRM) в качестве параметра; это гарантирует, что команды AzureRM выполняются параллельно - через рабочий процесс или путем запуска нового дочернего задания автоматизации с помощью Start-AzureRMAutoRunbookJob - выполняются в указанном контексте.

Причина этой проблемы заключается в том, что при использовании рабочих процессов автоматизации, управляемых Azure, при большом объеме заданий Azure повторно использует работников для сохранения ресурсов, и контекст может быть утерян.

Пример этого доступен на GitHub (https://github.com/jefffanjoy/DemoCode/tree/master/Runbooks/Azure%20Automation)

person H Boyce    schedule 24.05.2018
comment
Забыл упомянуть, что вам нужно будет убедиться, что ваши модули AzureRM обновлены. MS Support рекомендует минимум 5.7.0. Также рекомендовал бы вручную развернуть обновления, поскольку мы видели проблемы с помощью кнопки «Развернуть в Azure Automation», поскольку она учитывала зависимости ›= версии и вызывала у нас проблемы: для AzureRm.Storage 4.2.3 требуется AzureRM.Profile› = 4.6, Azure.Storage › = 4.3.2. Button извлекает последнюю из обеих зависимостей и вызывает у нас проблемы. - person H Boyce; 24.05.2018
comment
Спасибо, я слышал, что новый параметр контекста должен был исправить это, но так и не успел попробовать. - person BenV; 24.05.2018