如何以编程方式识别Azure Log Analytics可用SKU
识别Azure Log Analytics工作区有效SKU的BASH方案
我帮你整理了一套用BASH在部署ARM模板前判断目标订阅有效SKU的可行方案,核心是通过查询订阅的Operations Management Suite(OMS)权益绑定状态,区分新旧订阅的适用SKU:
核心逻辑
- 新订阅(无OMS权益绑定):仅支持
PerGB2018SKU - 未迁移的旧订阅(有OMS权益绑定):支持旧版SKU(如Free、Standalone、PerNode等)
方法一:用Azure CLI(推荐,无需手动处理认证)
这是最简便的方式,依赖Azure CLI和jq工具(用来解析JSON响应):
- 先确保已登录Azure CLI(自动化场景可使用服务主体登录):
az login # 如果需要切换到目标订阅 az account set --subscription <订阅ID或名称>
- 获取订阅ID并查询OMS权益状态:
# 获取当前订阅ID SUBSCRIPTION_ID=$(az account show --query id -o tsv) # 调用REST API查询订阅的OMS配置 RESPONSE=$(az rest --method get --url "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Insights/operationsManagementSuiteConfigurations/default?api-version=2015-11-01-preview") # 解析响应,判断是否有OMS权益绑定(无响应时默认返回false) HAS_OMS_ENTITLEMENT=$(echo $RESPONSE | jq -r '.properties.hasOperationsManagementSuite // "false"')
方法二:直接用CURL调用REST API(适合无法使用Azure CLI的场景)
如果环境限制不能用Azure CLI,可以手动获取令牌后调用API:
SUBSCRIPTION_ID=$(az account show --query id -o tsv) # 获取访问令牌(也可通过服务主体方式获取) ACCESS_TOKEN=$(az account get-access-token --query accessToken -o tsv) # 调用API RESPONSE=$(curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \ "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Insights/operationsManagementSuiteConfigurations/default?api-version=2015-11-01-preview") # 解析权益状态,默认返回false(如果API返回404,说明无OMS绑定) HAS_OMS_ENTITLEMENT=$(echo $RESPONSE | jq -r '.properties.hasOperationsManagementSuite // "false"')
根据结果动态部署ARM模板
拿到HAS_OMS_ENTITLEMENT的值后,就可以在部署时指定正确的SKU:
# 根据权益状态选择SKU if [ "$HAS_OMS_ENTITLEMENT" = "true" ]; then # 旧订阅可选SKU:Free、Standalone、PerNode、Standard、Premium,根据需求选择 SELECTED_SKU="Standalone" else SELECTED_SKU="PerGB2018" fi # 部署ARM模板 az deployment group create \ --resource-group <你的资源组名称> \ --template-file <ARM模板路径> \ --parameters skuName=$SELECTED_SKU
补充说明
- 如果API返回404错误,说明该订阅没有OMS权益绑定,直接使用
PerGB2018即可 - 旧版SKU的可用性可能因订阅的历史权益而异,建议根据实际需求选择合适的旧版SKU
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

