Powershell Azure自动化作业共享订阅上下文
我有一个Azure Automation runbook,它为每个订阅启动一个子runbookPowershell Azure自动化作业共享订阅上下文,powershell,azure,azure-automation,Powershell,Azure,Azure Automation,我有一个Azure Automation runbook,它为每个订阅启动一个子runbook foreach ($sub in $subscriptions) { $ChildRunbookInputParams = @{"SubscriptionId"="$($sub.SubscriptionId)"} $job = Start-AzureRmAutomationRunbook ` -Name $ChildRunbookName `
foreach ($sub in $subscriptions)
{
$ChildRunbookInputParams = @{"SubscriptionId"="$($sub.SubscriptionId)"}
$job = Start-AzureRmAutomationRunbook `
-Name $ChildRunbookName `
-Parameters $ChildRunbookInputParams `
-ResourceGroupName $AutomationAccountResourceGroup `
-AutomationAccountName $AutomationAccountName
}
父运行手册和子运行手册都使用相同的运行方式帐户
我遇到的问题是,运行手册似乎在共享上下文,即使它们作为独立作业运行。父runbook对包含自动化帐户的订阅执行
设置AzureRmContext
,以便可以启动AzureRmAutomationRunbook
。子runbook对传递的订阅ID执行设置AzureRmContext
,以便处理该订阅中的资源。在第一个子runbook启动后,父runbook中后续的
Start azurerAutomationRunbook
调用将失败,因为它无法再找到指定的runbook。随着其他子runbook的启动(父runbook在第一个更改订阅之前启动了几个子作业),先前启动的子作业开始处理最后一个订阅的资源
foreach ($sub in $subscriptions)
{
$ChildRunbookInputParams = @{"SubscriptionId"="$($sub.SubscriptionId)"}
$job = Start-AzureRmAutomationRunbook `
-Name $ChildRunbookName `
-Parameters $ChildRunbookInputParams `
-ResourceGroupName $AutomationAccountResourceGroup `
-AutomationAccountName $AutomationAccountName
}
这是预期的行为吗?处理多个订阅似乎是一个常见的要求;这方面的推荐模式是什么?我们也遇到了这个问题,必须与Microsoft一起打开一个支持案例来解决。自2017年9月以来,Azure PowerShell模块/cmdlet开始支持在配置文件(AzureRM上下文)中作为参数传递能力,这可能才成为可能;这确保了并行运行的AzureRM命令(通过工作流或使用Start-AzureRMAutoRunbookJob启动新的子自动化作业)在指定的上下文中执行 出现此问题的原因是,使用Azure managed automation workers时,在高作业量下,Azure会重用workers以节省资源,并且可能会丢失上下文
GitHub()上提供了这方面的示例。相关反馈项目:相关GitHub问题:忘记提及您需要确保您的AzureRM模块是最新的。MS支持建议最低5.7.0。我们还建议使用“部署到Azure自动化”按钮手动部署更新,因为它尊重>=版本依赖关系,并导致我们出现问题:AzureRm.Storage 4.2.3需要AzureRm.Profile>=4.6,Azure.Storage>=4.3.2。Button提取了这两个依赖项中最新的一个,并为我们带来了问题。谢谢,我听说新的上下文参数应该可以解决这个问题,但从未尝试过。