Azure 自动化作业共享订阅上下文
Azure Automation jobs sharing subscription context
我有一个 Azure 自动化运行手册,它为每个订阅启动一个 child 运行手册。
foreach ($sub in $subscriptions)
{
$ChildRunbookInputParams = @{"SubscriptionId"="$($sub.SubscriptionId)"}
$job = Start-AzureRmAutomationRunbook `
-Name $ChildRunbookName `
-Parameters $ChildRunbookInputParams `
-ResourceGroupName $AutomationAccountResourceGroup `
-AutomationAccountName $AutomationAccountName
}
parent 和 child 运行手册都使用相同的 run-as 帐户。
我 运行 遇到的问题是 Runbook 似乎在共享上下文,即使它们 运行 作为独立作业也是如此。
parent runbook 对包含自动化帐户的订阅执行 Set-AzureRmContext
,以便它可以 Start-AzureRmAutomationRunbook
。 child runbook 对传递给它的订阅 ID 执行 Set-AzureRmContext
,以便它可以处理该订阅中的资源。
在第一个 child runbook 启动后,parent runbook 中的后续 Start-AzureRmAutomationRunbook
调用失败,因为它无法再找到指定的 runbook。随着其他 child runbook 的启动(parent runbook 在第一个更改订阅之前启动了多个 child 作业),先前启动的 child 作业开始处理资源最后订阅。
这是预期的行为吗?使用多个订阅似乎是一个常见的需求;推荐的模式是什么?
我们 运行 也遇到了这个问题,不得不向 Microsoft 提出支持案例来解决。自 2017 年 9 月以来,这可能才有可能,因为 Azure PowerShell modules/cmdlets 开始支持配置文件(AzureRM 上下文)中的能力传递作为参数;这确保 AzureRM 命令 运行 并行——通过工作流或通过使用 Start-AzureRMAutoRunbookJob 启动新的子自动化作业——针对指定的上下文执行。
这个问题的原因是因为使用 Azure 管理的自动化工作器,在高作业量下,Azure 重用工作器以节省资源,上下文可能会丢失。
GitHub (https://github.com/jefffanjoy/DemoCode/tree/master/Runbooks/Azure%20Automation)
上提供了此示例
我有一个 Azure 自动化运行手册,它为每个订阅启动一个 child 运行手册。
foreach ($sub in $subscriptions)
{
$ChildRunbookInputParams = @{"SubscriptionId"="$($sub.SubscriptionId)"}
$job = Start-AzureRmAutomationRunbook `
-Name $ChildRunbookName `
-Parameters $ChildRunbookInputParams `
-ResourceGroupName $AutomationAccountResourceGroup `
-AutomationAccountName $AutomationAccountName
}
parent 和 child 运行手册都使用相同的 run-as 帐户。
我 运行 遇到的问题是 Runbook 似乎在共享上下文,即使它们 运行 作为独立作业也是如此。
parent runbook 对包含自动化帐户的订阅执行 Set-AzureRmContext
,以便它可以 Start-AzureRmAutomationRunbook
。 child runbook 对传递给它的订阅 ID 执行 Set-AzureRmContext
,以便它可以处理该订阅中的资源。
在第一个 child runbook 启动后,parent runbook 中的后续 Start-AzureRmAutomationRunbook
调用失败,因为它无法再找到指定的 runbook。随着其他 child runbook 的启动(parent runbook 在第一个更改订阅之前启动了多个 child 作业),先前启动的 child 作业开始处理资源最后订阅。
这是预期的行为吗?使用多个订阅似乎是一个常见的需求;推荐的模式是什么?
我们 运行 也遇到了这个问题,不得不向 Microsoft 提出支持案例来解决。自 2017 年 9 月以来,这可能才有可能,因为 Azure PowerShell modules/cmdlets 开始支持配置文件(AzureRM 上下文)中的能力传递作为参数;这确保 AzureRM 命令 运行 并行——通过工作流或通过使用 Start-AzureRMAutoRunbookJob 启动新的子自动化作业——针对指定的上下文执行。
这个问题的原因是因为使用 Azure 管理的自动化工作器,在高作业量下,Azure 重用工作器以节省资源,上下文可能会丢失。
GitHub (https://github.com/jefffanjoy/DemoCode/tree/master/Runbooks/Azure%20Automation)
上提供了此示例