为什么设置 CosmosDB ThroughputSettings 会导致“系统中不存在具有指定 id 的实体”?

Ale*_*ber 5 azure azure-resource-manager azure-rm-template azure-cosmosdb

在尝试部署具有 2 个集合(“MyCollection1”、“MyCollection2”)的 CosmosDB 实例时,我不断收到错误:

NotFound:系统中不存在指定id的实体

因此,我继续在自定义 ARM 模板中搜索“resourceId”(请参见下文),但找不到错误原因。

我不明白,为什么管道至少不为我打印行号?

管道截图

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "accountName": {
            "defaultValue": "my-cosmosdb",
            "type": "String"
        }
    },
    "variables": {
        "resourceName": "[concat(resourceGroup().name, '-', parameters('accountName'))]",
        "resourceId": "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]",
        "apiVersion": "[providers('Microsoft.DocumentDB', 'databaseAccounts').apiVersions[0]]"
    },
    "outputs": {
        "CosmosDbConnectionString": {
            "type": "string",
            "value": "[concat('AccountEndpoint=https://', variables('resourceName'), '.documents.azure.com:443/;AccountKey=', listKeys(variables('resourceId'), variables('apiVersion')).primaryMasterKey, ';')]"
        },
        "DatabaseName": {
            "type": "string",
            "value": "MyDB"
        },
        "CollectionName1": {
            "type": "string",
            "value": "MyCollection1"
        },
        "CollectionName2": {
            "type": "string",
            "value": "MyCollection2"
        }
    },
    "resources": [
        {
            "type": "Microsoft.DocumentDB/databaseAccounts",
            "apiVersion": "2020-03-01",
            "name": "[variables('resourceName')]",
            "location": "[resourceGroup().location]",
            "tags": {
                "defaultExperience": "DocumentDB"
            },
            "kind": "GlobalDocumentDB",
            "properties": {
                "publicNetworkAccess": "Enabled",
                "enableAutomaticFailover": false,
                "enableMultipleWriteLocations": false,
                "isVirtualNetworkFilterEnabled": false,
                "virtualNetworkRules": [],
                "disableKeyBasedMetadataWriteAccess": false,
                "databaseAccountOfferType": "Standard",
                "consistencyPolicy": {
                    "defaultConsistencyLevel": "Session",
                    "maxIntervalInSeconds": 5,
                    "maxStalenessPrefix": 100
                },
                "locations": [
                    {
                        "locationName": "[resourceGroup().location]",
                        "provisioningState": "Succeeded",
                        "failoverPriority": 0,
                        "isZoneRedundant": false
                    }
                ],
                "capabilities": []
            }
        },
        {
            "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
            "apiVersion": "2020-03-01",
            "name": "[concat(variables('resourceName'), '/MyDB')]",
            "dependsOn": [
                "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]"
            ],
            "properties": {
                "resource": {
                    "id": "MyDB"
                },
                "options": {}
            }
        },
        {
            "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers",
            "apiVersion": "2020-03-01",
            "name": "[concat(variables('resourceName'), '/MyDB/MyCollection1')]",
            "dependsOn": [
                "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('resourceName'), 'MyDB')]",
                "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]"
            ],
            "properties": {
                "resource": {
                    "id": "MyCollection1",
                    "indexingPolicy": {
                        "indexingMode": "consistent",
                        "automatic": true,
                        "includedPaths": [
                            {
                                "path": "/*"
                            }
                        ],
                        "excludedPaths": [
                            {
                                "path": "/\"_etag\"/?"
                            }
                        ]
                    },
                    "partitionKey": {
                        "paths": [
                            "/partitionKey"
                        ],
                        "kind": "Hash"
                    },
                    "uniqueKeyPolicy": {
                        "uniqueKeys": []
                    },
                    "conflictResolutionPolicy": {
                        "mode": "LastWriterWins",
                        "conflictResolutionPath": "/_ts"
                    }
                },
                "options": {}
            }
        },
        {
            "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers",
            "apiVersion": "2020-03-01",
            "name": "[concat(variables('resourceName'), '/MyDB/MyCollection2')]",
            "dependsOn": [
                "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('resourceName'), 'MyDB')]",
                "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]"
            ],
            "properties": {
                "resource": {
                    "id": "MyCollection2",
                    "indexingPolicy": {
                        "indexingMode": "consistent",
                        "automatic": true,
                        "includedPaths": [
                            {
                                "path": "/*"
                            }
                        ],
                        "excludedPaths": [
                            {
                                "path": "/\"_etag\"/?"
                            }
                        ]
                    },
                    "partitionKey": {
                        "paths": [
                            "/partitionKey"
                        ],
                        "kind": "Hash"
                    },
                    "uniqueKeyPolicy": {
                        "uniqueKeys": []
                    },
                    "conflictResolutionPolicy": {
                        "mode": "LastWriterWins",
                        "conflictResolutionPath": "/_ts"
                    }
                },
                "options": {}
            }
        },
        {
            "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/throughputSettings",
            "apiVersion": "2020-03-01",
            "name": "[concat(variables('resourceName'), '/MyDB/default')]",
            "dependsOn": [
                "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('resourceName'), 'MyDB')]",
                "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]"
            ],
            "properties": {
                "resource": {
                    "throughput": 400
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

更新:

我已经删除了创建集合的部分,但错误仍然存​​在。

更新2:

以下部分似乎会导致错误,但为什么呢?

{
    "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/throughputSettings",
    "apiVersion": "2020-03-01",
    "name": "[concat(variables('resourceName'), '/MyDB/default')]",
    "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('resourceName'), 'MyDB')]",
        "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]"
    ],
    "properties": {
        "resource": {
            "throughput": 400
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

dependentOn条目有什么问题"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('resourceName'), 'MyDB')]

更新3:

尝试手动部署上面列出的完整 ARM 模板会导致:

屏幕截图吞吐量错误

截图错误

Mar*_*own 8

尝试在数据库选项中设置吞吐量。

更新:您无法在最初配置时没有吞吐量的资源上指定吞吐量。没有吞吐量配置的数据库和容器稍后无法更新以拥有吞吐量。相反,配置有吞吐量的资源无法更新或删除。您必须删除并重新创建资源。这将需要迁移您的数据。

{
        "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
        "apiVersion": "2020-03-01",
        "name": "[concat(variables('resourceName'), '/MyDB')]",
        "dependsOn": [
            "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]"
        ],
        "properties": {
            "resource": {
                "id": "MyDB"
            },
            "options": { "throughput": "[parameters('throughput')]" }
        }
    },
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您可以使用很多示例来从此处的Cosmos DB 模板开始

  • 您无法更新在创建时未设置吞吐量的资源。创建资源集时,其选项中的吞吐量如图所示。当您想要更新吞吐量时,请使用新的吞吐量值重新部署同一模板。谢谢。 (6认同)
  • 根据@MarkBrown 评论,我遇到了同样的问题,这是因为我使用了与您相同的初始脚本 - 它创建了数据库,但未能在单独的步骤中添加吞吐量。一旦我删除数据库,上面的代码就起作用了。 (2认同)

Ale*_*ber 1

以下内容对我有用,我必须将“sqlDatabases/throughputSettings”替换为“sqlDatabases/containers/throughputSettings”:

{
    "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/throughputSettings",
    "apiVersion": "2020-03-01",
    "name": "[concat(variables('resourceName'), '/', variables('DatabaseName'), '/', variables('CollectionName1'), '/default')]",
    "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers', variables('resourceName'), variables('databaseName'), variables('CollectionName1'))]",
        "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', variables('resourceName'), variables('databaseName'))]",
        "[resourceId('Microsoft.DocumentDB/databaseAccounts', variables('resourceName'))]"
    ],
    "properties": {
        "resource": {
            "throughput": 400
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后是 CollectionName2 的类似条目