You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure ADO Runbook脚本如何按LAB/PRD环境动态传入订阅参数?

解决方案:Azure Runbook脚本动态适配LAB/PRD环境批量处理订阅

1. 优化脚本参数设计

将原有的单个订阅参数改为环境标识参数,通过ValidateSet强制仅允许传入LAB或PRD,避免无效输入。同时保留可选的手动订阅列表参数,方便临时调试。

修改后的参数部分:

Param(
    [Parameter(Mandatory=$true)]
    [ValidateSet('LAB','PRD')]
    [string]$Environment,
    # 可选:手动传入订阅ID列表,覆盖环境默认配置
    [string[]]$SubscriptionIds = $null
)

# 用托管身份连接Azure
Connect-AzAccount -Identity

2. 实现环境与订阅的关联映射

提供两种灵活方案,按需选择:

方案A:硬编码订阅映射(简单直接,适合订阅固定场景)

在脚本中直接定义LAB/PRD对应的订阅ID列表,无需额外依赖:

# 定义环境-订阅ID映射表
$envSubscriptions = @{
    'LAB' = @('lab-sub-id-1', 'lab-sub-id-2')
    'PRD' = @('prd-sub-id-1', 'prd-sub-id-2')
}

# 若未手动传入订阅ID,自动加载对应环境的列表
if (-not $SubscriptionIds) {
    $SubscriptionIds = $envSubscriptions[$Environment]
}

方案B:使用Azure自动化变量组(动态可配置,无需修改脚本)

适合需要频繁调整订阅列表的场景:

  1. 在Azure自动化账户中创建变量组(如EnvSubscriptions)
  2. 添加两个变量:
    • LAB_Subscriptions:值为JSON数组格式,例如["lab-sub-id-1","lab-sub-id-2"]
    • PRD_Subscriptions:值为["prd-sub-id-1","prd-sub-id-2"]
  3. 脚本中读取变量组内容:
# 读取对应环境的订阅ID列表(替换为你的资源组和自动化账户名)
$subsJson = Get-AzAutomationVariable -ResourceGroupName "your-rg-name" -AutomationAccountName "your-automation-account" -Name "$($Environment)_Subscriptions" | Select-Object -ExpandProperty Value
$SubscriptionIds = ConvertFrom-Json -InputObject $subsJson

3. 批量处理多个订阅

通过循环切换订阅上下文,批量执行清理逻辑:

# 遍历所有目标订阅
foreach ($subId in $SubscriptionIds) {
    # 切换到当前订阅
    Set-AzContext -SubscriptionId $subId | Out-Null
    Write-Output "正在处理订阅:$subId"

    # 此处插入你的存储账户清理逻辑,示例:
    # $unusedAccounts = Get-AzStorageAccount | Where-Object { /* 未使用判断条件,如最后访问时间超过30天 */ }
    # foreach ($sa in $unusedAccounts) {
    #     Remove-AzStorageAccount -ResourceGroupName $sa.ResourceGroupName -Name $sa.StorageAccountName -Force
    # }
}

4. 配置执行计划

在Azure自动化账户中创建两个独立计划,分别关联脚本并传入对应环境参数:

  • LAB计划:设置执行频率(如每周日),关联Runbook时指定参数 -Environment LAB
  • PRD计划:设置执行频率(如每月最后一天),关联Runbook时指定参数 -Environment PRD

关于JSON参数文件的说明

如果确实需要用外部JSON文件存储配置,可以将文件上传至Azure存储账户,脚本中读取解析:

// env-subscriptions.json 内容
{
    "LAB": ["lab-sub-id-1", "lab-sub-id-2"],
    "PRD": ["prd-sub-id-1", "prd-sub-id-2"]
}

脚本读取逻辑:

# 从自动化存储账户读取配置文件(替换为你的存储账户和容器名)
$storageContext = New-AzStorageContext -StorageAccountName "your-automation-storage" -UseConnectedAccount
Get-AzStorageBlobContent -Container "scripts" -Blob "env-subscriptions.json" -Context $storageContext -Destination "$env:TEMP\config.json" -Force
$envConfig = Get-Content "$env:TEMP\config.json" | ConvertFrom-Json
$SubscriptionIds = $envConfig.$Environment

但这种方式不如变量组便捷,变量组支持直接在Azure门户修改配置,无需操作存储资源。


内容的提问来源于stack exchange,提问作者Lautaro Iriazabal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:40:43