Azure Policy配置求助:限制Cosmos DB SQL API吞吐量不超500失败
排查Cosmos DB Azure Policy拒绝高吞吐量资源的问题
看起来你的策略规则有几个关键问题导致无法正常工作,我来帮你逐一拆解并修正:
1. 逻辑判断完全反转
你当前的规则里用了not包裹greater: 500,这意味着只有当吞吐量不大于500时才会触发拒绝,这和你想要的“拒绝吞吐量超过500”的逻辑完全相反。你需要去掉not,直接判断吞吐量大于500的情况。
2. 字段路径错误
你使用的minimumThroughput不是正确的字段名,而且针对SQL数据库和容器的吞吐量字段路径是不同的:
- 对于SQL数据库,吞吐量字段路径是
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/throughput - 对于SQL容器,吞吐量字段路径是
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/throughput
另外,All模式虽然可以用,但更推荐使用Indexed模式,它只会评估支持资源提供程序索引的资源,更高效。
修正后的策略规则
情况1:只限制SQL数据库的吞吐量
如果你想拒绝创建吞吐量超过500的SQL数据库,使用以下规则:
{ "mode": "Indexed", "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases" }, { "field": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/throughput", "greater": 500 } ] }, "then": { "effect": "deny" } } }
情况2:同时限制SQL数据库和容器的吞吐量
如果你想同时限制数据库和容器的吞吐量都不超过500,可以用anyOf来包含两种资源类型的判断:
{ "mode": "Indexed", "policyRule": { "if": { "anyOf": [ { "allOf": [ { "field": "type", "equals": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases" }, { "field": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/throughput", "greater": 500 } ] }, { "allOf": [ { "field": "type", "equals": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers" }, { "field": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/throughput", "greater": 500 } ] } ] }, "then": { "effect": "deny" } } }
额外验证建议
- 部署策略后,尝试创建一个吞吐量设为600的SQL数据库/容器,验证是否会被拒绝
- 可以使用Azure Policy的“测试”功能,针对现有资源评估策略是否正确识别违规项
内容的提问来源于stack exchange,提问作者SreeKiran Nageli
相关产品推荐
相关产品推荐

