部署CosmosDB ARM模板配置throughputSettings报实体不存在错误
Fixing "NotFound: Entity with the specified id does not exist" in Cosmos DB ARM Template Throughput Settings
我之前碰到过完全一样的问题,这个错误的根源确实出在throughputSettings的dependsOn配置上,要么是你用的resourceId函数写法不对,要么是SQL数据库资源的定义本身有疏漏。咱们一步步来解决:
1. 先检查SQL数据库资源的命名格式
Cosmos DB的SQL数据库是账户的子资源,所以它的name属性必须是[账户名称]/[数据库名称]的拼接格式。如果你的数据库资源只写了MyDB而没带上账户名,Azure根本找不到它,自然会抛出NotFound错误。
正确的数据库资源定义应该是这样的:
{ "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases", "name": "[concat(variables('resourceName'), '/MyDB')]", // 必须是账户名/数据库名 "apiVersion": "2023-04-15", // 建议用稳定的新版本 "dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]" ], "properties": { "resource": { "id": "MyDB" // 这里的id要和name的后半部分一致 } } }
2. 修正throughputSettings的dependsOn配置
这里有两种可靠的写法,推荐第一种(更简洁不易错):
方式1:直接引用数据库资源的逻辑名称
如果你的SQL数据库资源在模板里有逻辑名称(比如下面示例里的mySqlDb),直接用resourceId引用这个逻辑名称就行,不需要手动拼接路径:
{ "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/throughputSettings", "name": "[concat(variables('resourceName'), '/MyDB/default')]", // 格式:账户名/数据库名/default "apiVersion": "2023-04-15", "dependsOn": [ "[resourceId('mySqlDb')]" // 引用数据库资源的逻辑名称 ], "properties": { "resource": { "throughput": 400 // 替换成你的目标吞吐量 } } }
方式2:修正resourceId函数的参数
如果你坚持要手动写resourceId,确保参数顺序和格式完全正确:
"dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('resourceName'), 'MyDB')]" ]
注意:如果你的Cosmos DB账户在另一个资源组,需要在resourceId里明确加上资源组名称:
"dependsOn": [ "[resourceId('目标资源组名称', 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('resourceName'), 'MyDB')]" ]
3. 额外排查点
- 确认
variables('resourceName')没有拼写错误,确实指向你的Cosmos DB账户名称 - 所有Cosmos DB相关资源的
apiVersion要保持一致,避免版本差异导致的资源解析问题 - 手动部署时,确认选择的资源组和模板中指定的一致(如果模板里没指定资源组,默认是当前部署的资源组)
按照上面的步骤调整后,应该就能解决这个NotFound错误了。
内容的提问来源于stack exchange,提问作者Alexander Farber
相关产品推荐
相关产品推荐

