【问题标题】:Azure Automation jobs sharing subscription contextAzure 自动化作业共享订阅上下文
【发布时间】:2018-05-24 08:16:32
【问题描述】:

我有一个 Azure 自动化 Runbook,它为每个订阅启动一个子 Runbook。

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

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

父 Runbook 和子 Runbook 都使用相同的 run-as 帐户。

我遇到的问题是运行手册似乎在共享上下文,即使它们作为独立作业运行。
父 Runbook 对包含自动化帐户的订阅执行 Set-AzureRmContext,以便它可以 Start-AzureRmAutomationRunbook。子 Runbook 对其传递的订阅 ID 执行 Set-AzureRmContext,以便它可以处理该订阅中的资源。
第一个子 Runbook 启动后,父 Runbook 中的后续 Start-AzureRmAutomationRunbook 调用将失败,因为它无法再找到指定的 Runbook。随着其他子 Runbook 的启动(父 Runbook 在第一个更改订阅之前启动了几个子作业),之前启动的子作业开始处理最后一个订阅的资源。

这是预期的行为吗?处理多个订阅似乎是一种常见要求;推荐的模式是什么?

【问题讨论】:

标签: powershell azure azure-automation


【解决方案1】:

我们也遇到了这个问题,不得不向 Microsoft 开一个支持案例来解决。自 2017 年 9 月以来,这可能只是可能的,因为 Azure PowerShell 模块/cmdlet 开始支持将配置文件(AzureRM 上下文)作为参数传递的能力;这可确保并行运行的 AzureRM 命令(通过工作流或使用 Start-AzureRMAutoRunbookJob 启动新的子自动化作业)针对指定的上下文执行。

出现此问题的原因是因为使用 Azure 管理的自动化工作人员,在高作业量下,Azure 会重复使用工作人员来节省资源,并且可能会丢失上下文。

GitHub 上提供了此示例 (https://github.com/jefffanjoy/DemoCode/tree/master/Runbooks/Azure%20Automation)

【讨论】:

  • 忘了提到您需要确保您的 AzureRM 模块是最新的。 MS Support 建议最低 5.7.0。还建议手动部署更新,因为我们使用“部署到 Azure 自动化”按钮看到了问题,因为它尊重 >= 版本依赖关系并导致我们出现问题:AzureRm.Storage 4.2.3 需要 AzureRM.Profile >= 4.6,Azure。存储 >= 4.3.2。 Button 提取了最新的两个依赖项并为我们带来了问题。
  • 谢谢,我听说新的上下文参数应该可以解决这个问题,但一直没有尝试过。
猜你喜欢
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 2015-07-06
相关资源
最近更新 更多