能否在ARM模板中判断订阅是否符合Cosmos DB免费层账户资格
问题描述
我正在编写一款ARM模板,该模板将作为面向部分客户分发的应用安装程序的组成部分执行,应用依赖Cosmos DB服务。对客户而言,我们创建的Cosmos DB账户若启用免费层将是更优选择。
根据官方文档说明:
每个Azure订阅最多可拥有1个免费层Azure Cosmos DB账户
对大多数客户来说,我们通过ARM模板预配的Cosmos DB账户会是其首个且唯一的Cosmos DB账户,因此90%的场景下,我们可通过如下配置启用免费层:
"resources": [ { "type": "Microsoft.DocumentDB/databaseAccounts", "apiVersion": "2020-03-01", // ... "properties": { "enableFreeTier": true,
但部分客户(如规模较大的客户、技术探索意愿较强的客户)可能已拥有Cosmos DB账户,且大概率已为该账户启用了免费层。请问是否存在方法可在ARM模板中判断当前订阅是否仍具备免费层Cosmos DB账户的开通资格?
解答
ARM模板本身没有提供内置的订阅配额查询能力,无法通过原生模板逻辑直接判断免费层开通资格,落地可选择两种成熟方案:
- 前置脚本预检
在模板部署流程的最前端增加一段Azure CLI/PowerShell部署脚本,提前拉取当前订阅下的所有Cosmos DB账户,检查是否存在已开启免费层的实例。如果未查询到免费层实例,就传参将enableFreeTier设为true;如果已存在免费层实例,就将参数设为false,再执行后续的Cosmos账户创建逻辑。
检查免费层账户的CLI命令可直接参考:
命令返回空值即代表当前订阅还有免费层开通资格,全程不需要客户手动填写配置。az cosmosdb list --query "[?properties.enableFreeTier == `true`].id" -o tsv - 失败自动回退
无需做前置检查,部署时先默认使用enableFreeTier: true的配置创建Cosmos账户,如果接口返回免费层配额耗尽的对应错误,自动触发第二次部署,将enableFreeTier改为false重试即可。该方案逻辑更简洁,不需要额外增加预检步骤,适合追求安装流程轻量化的分发场景。
注意:如果直接在模板中硬编码enableFreeTier: true,遇到已经用完免费层配额的订阅会直接导致部署失败,中断整个安装流程,必须搭配上述任意一种适配逻辑使用。
内容的提问来源于stack exchange,提问作者Tom Wright
相关产品推荐
相关产品推荐

