使用 Azure 资源管理器模板管理 Azure Cosmos DB MongoDB API 资源

适用于: Azure Cosmos DB API for MongoDB

本文介绍如何使用 Azure 资源管理器模板来帮助部署和管理 Azure Cosmos DB for MongoDB API 帐户、数据库和集合。

本文仅提供 Azure Cosmos DB API for MongoDB 的示例,若要查找其他 API 类型帐户的示例,请参阅以下文章:将 Azure 资源管理器模板与适用于 CassandraGremlinSQL的 Azure Cosmos DB API 配合使用。

重要

  • 帐户名称限制为 44 个字符,全部小写。
  • 若要更改吞吐量值,请用更新的 RU/s 重新部署模板。
  • 当你在 Azure Cosmos 帐户中添加或删除位置时,无法同时修改其他属性。 必须单独执行这些操作。

若要创建以下任何 Azure Cosmos DB 资源,请将下列示例模板复制到新的 json 文件中。 在部署具有不同名称和值的同一资源的多个实例时,可以选择创建要使用的参数 json 文件。 可以通过多种方式部署 Azure 资源管理器模板,包括 Azure 门户Azure CLIAzure PowerShellGitHub

预配了自动缩放吞吐量的 Azure Cosmos for MongoDB 帐户

此模板将创建一个 Azure Cosmos for MongoDB API 帐户(3.2 或 3.6),其中包含两个在数据库级别共享自动缩放吞吐量的集合。 此模板还支持从 Azure 快速入门模板库进行一键部署。

备注

当我们从 https://raw.githubusercontent.com/ 网站下载特定模板并尝试从自定义模板进行部署时,有时会遇到某些问题。

githubusercontent 前缀模板部署问题

我们可以按照以下指示在 Azure 中国云世纪互联中部署模板:

  1. 复制模板 URI,通过更改前缀、中缀和模板文件名来转换 URI。 例如,源 URI 是 https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-cosmosdb-sql-autoscale/azuredeploy.json

    类别 原始值 转换后的值 操作
    前缀 https://raw.githubusercontent.com https://github.com 更新
    中辍 blob master 之前添加(Git 存储库的默认分支名称)
    模板文件名 azuredeploy.json 你的下载模板文件名 update

    修改后,转换后的 URI 看起来将类似于 https://github.com/Azure/azure-quickstart-templates/blob/master/101-cosmosdb-sql-autoscale/azuredeploy.json

    请注意,某些模板 URI 已移至 https://github.com/Azure/azure-quickstart-template/quickstarts/{Microsoft_Resource_Provider_Name}/ ,你可以按照相应的路径规定来更新原始 URI。

  2. 复制转换后的 URI,并在 Internet 浏览器中手动下载特定的模板内容。

  3. 在门户的“自定义部署”页中,选择“在编辑器中生成自己的模板”。

  4. 将下载的模板内容复制到“编辑模板”页中,并按照 Azure 中国云的要求更新参数,例如 Azure 中国云环境不支持的终结点、位置、VM 映像、VM 大小、SKU 和资源提供程序的 API 版本。

  5. 选择“保存”以返回“自定义部署”页。

  6. 选择“我同意上述条款和条件”。

  7. 选择“购买”。

部署到 Azure

{
   "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "accountName": {
         "type": "string",
         "defaultValue": "[concat('mongodb-', uniqueString(resourceGroup().id))]",
         "metadata": {
            "description": "Cosmos DB account name"
         }
      },
      "location": {
         "type": "string",
         "defaultValue": "[resourceGroup().location]",
         "metadata": {
            "description": "Location for the Cosmos DB account."
         }
      },
      "primaryRegion": {
         "type": "string",
         "metadata": {
            "description": "The primary replica region for the Cosmos DB account."
         }
      },
      "secondaryRegion": {
         "type": "string",
         "metadata": {
            "description": "The secondary replica region for the Cosmos DB account."
         }
      },
      "serverVersion": {
         "defaultValue": "4.0",
         "allowedValues": [
            "3.2",
            "3.6",
            "4.0"
         ],
         "type": "String",
         "metadata": {
            "description": "Specifies the MongoDB server version to use."
         }
      },
      "defaultConsistencyLevel": {
         "type": "string",
         "defaultValue": "Session",
         "allowedValues": [
            "Eventual",
            "ConsistentPrefix",
            "Session",
            "BoundedStaleness",
            "Strong"
         ],
         "metadata": {
            "description": "The default consistency level of the Cosmos DB account."
         }
      },
      "maxStalenessPrefix": {
         "type": "int",
         "defaultValue": 100000,
         "minValue": 10,
         "maxValue": 2147483647,
         "metadata": {
            "description": "Max stale requests. Required for BoundedStaleness. Valid ranges, Single Region: 10 to 1000000. Multi Region: 100000 to 1000000."
         }
      },
      "maxIntervalInSeconds": {
         "type": "int",
         "defaultValue": 300,
         "minValue": 5,
         "maxValue": 86400,
         "metadata": {
            "description": "Max lag time (seconds). Required for BoundedStaleness. Valid ranges, Single Region: 5 to 84600. Multi Region: 300 to 86400."
         }
      },
      "databaseName": {
         "type": "string",
         "metadata": {
            "description": "The name for the Mongo DB database"
         }
      },
      "collection1Name": {
         "type": "string",
         "metadata": {
            "description": "The name for the first Mongo DB collection"
         }
      },
      "collection2Name": {
         "type": "string",
         "metadata": {
            "description": "The name for the second Mongo DB collection"
         }
      },
      "autoscaleMaxThroughput": {
         "type": "int",
         "defaultValue": 4000,
         "minValue": 4000,
         "maxValue": 1000000,
         "metadata": {
            "description": "Maximum throughput when using Autoscale Throughput Policy for the Database"
         }
      }
   },
   "variables": {
      "accountName": "[toLower(parameters('accountName'))]",
      "consistencyPolicy": {
         "Eventual": {
            "defaultConsistencyLevel": "Eventual"
         },
         "ConsistentPrefix": {
            "defaultConsistencyLevel": "ConsistentPrefix"
         },
         "Session": {
            "defaultConsistencyLevel": "Session"
         },
         "BoundedStaleness": {
            "defaultConsistencyLevel": "BoundedStaleness",
            "maxStalenessPrefix": "[parameters('maxStalenessPrefix')]",
            "maxIntervalInSeconds": "[parameters('maxIntervalInSeconds')]"
         },
         "Strong": {
            "defaultConsistencyLevel": "Strong"
         }
      },
      "locations": [
         {
            "locationName": "[parameters('primaryRegion')]",
            "failoverPriority": 0,
            "isZoneRedundant": false
         },
         {
            "locationName": "[parameters('secondaryRegion')]",
            "failoverPriority": 1,
            "isZoneRedundant": false
         }
      ]
   },
   "resources": [
      {
         "type": "Microsoft.DocumentDB/databaseAccounts",
         "name": "[variables('accountName')]",
         "apiVersion": "2021-01-15",
         "location": "[parameters('location')]",
         "kind": "MongoDB",
         "properties": {
            "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
            "locations": "[variables('locations')]",
            "databaseAccountOfferType": "Standard",
            "apiProperties": {
               "serverVersion": "[parameters('serverVersion')]"
            }
         }
      },
      {
         "type": "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases",
         "name": "[concat(variables('accountName'), '/', parameters('databaseName'))]",
         "apiVersion": "2021-01-15",
         "dependsOn": [
            "[resourceId('Microsoft.DocumentDB/databaseAccounts/', variables('accountName'))]"
         ],
         "properties": {
            "resource": {
               "id": "[parameters('databaseName')]"
            },
            "options": {
               "autoscaleSettings": {
                  "maxThroughput": "[parameters('autoscaleMaxThroughput')]"
               }
            }
         }
      },
      {
         "type": "Microsoft.DocumentDb/databaseAccounts/mongodbDatabases/collections",
         "name": "[concat(variables('accountName'), '/', parameters('databaseName'), '/', parameters('collection1Name'))]",
         "apiVersion": "2021-01-15",
         "dependsOn": [
            "[resourceId('Microsoft.DocumentDB/databaseAccounts/mongodbDatabases', variables('accountName'), parameters('databaseName'))]"
         ],
         "properties": {
            "resource": {
               "id": "[parameters('collection1Name')]",
               "shardKey": {
                  "user_id": "Hash"
               },
               "indexes": [
                  {
                     "key": {
                        "keys": [ "_id" ]
                     }
                  },
                  {
                     "key": {
                        "keys": [
                           "$**"
                        ]
                     }
                  },
                  {
                     "key": {
                        "keys": [ "user_id", "user_address" ]
                     },
                     "options": {
                        "unique": true
                     }
                  },
                  {
                     "key": {
                        "keys": [ "_ts" ],
                        "options": { "expireAfterSeconds": 2629746 }
                     }
                  }
               ],
               "options": {
                  "If-Match": "<ETag>"
               }
            }
         }
      },
      {
         "type": "Microsoft.DocumentDb/databaseAccounts/mongodbDatabases/collections",
         "name": "[concat(variables('accountName'), '/', parameters('databaseName'), '/', parameters('collection2Name'))]",
         "apiVersion": "2021-01-15",
         "dependsOn": [
            "[resourceId('Microsoft.DocumentDB/databaseAccounts/mongodbDatabases', variables('accountName'),  parameters('databaseName'))]"
         ],
         "properties": {
            "resource": {
               "id": "[parameters('collection2Name')]",
               "shardKey": {
                  "company_id": "Hash"
               },
               "indexes": [
                  {
                     "key": {
                        "keys": [ "_id" ]
                     }
                  },
                  {
                     "key": {
                        "keys": [
                           "$**"
                        ]
                     }
                  },
                  {
                     "key": {
                        "keys": [
                           "company_id",
                           "company_address"
                        ]
                     },
                     "options": {
                        "unique": true
                     }
                  },
                  {
                     "key": {
                        "keys": [ "_ts" ],
                        "options": { "expireAfterSeconds": 2629746 }
                     }
                  }
               ],
               "options": {
                  "If-Match": "<ETag>"
               }
            }
         }
      }
   ]
}

预配了标准吞吐量的 Azure Cosmos for MongoDB 帐户

此模板将创建一个 Azure Cosmos for MongoDB API 帐户(3.2 或 3.6),其中包含两个在数据库级别共享 400 RU/s 标准(手动)吞吐量的集合。 此模板还支持从 Azure 快速入门模板库进行一键部署。

部署到 Azure

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "accountName": {
            "type": "string",
            "defaultValue": "[concat('mongodb-', uniqueString(resourceGroup().id))]",
            "metadata": {
                "description": "Cosmos DB account name"
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "Location for the Cosmos DB account."
            }
        },
        "primaryRegion":{
            "type":"string",
            "metadata": {
                "description": "The primary replica region for the Cosmos DB account."
            }
        },
        "secondaryRegion":{
            "type":"string",
            "metadata": {
              "description": "The secondary replica region for the Cosmos DB account."
          }
        },
        "defaultConsistencyLevel": {
            "type": "string",
            "defaultValue": "Session",
            "allowedValues": [ "Eventual", "ConsistentPrefix", "Session", "BoundedStaleness", "Strong" ],
            "metadata": {
                "description": "The default consistency level of the Cosmos DB account."
            }
        },
        "serverVersion": {
            "defaultValue": "4.0",
            "allowedValues": [
                "3.2",
                "3.6",
                "4.0"
            ],
            "type": "String",
            "metadata": {
                "description": "Specifies the MongoDB server version to use."
            }
        },
        "maxStalenessPrefix": {
            "type": "int",
            "defaultValue": 100000,
            "minValue": 10,
            "maxValue": 2147483647,
            "metadata": {
                "description": "Max stale requests. Required for BoundedStaleness. Valid ranges, Single Region: 10 to 1000000. Multi Region: 100000 to 1000000."
            }
        },
        "maxIntervalInSeconds": {
            "type": "int",
            "defaultValue": 300,
            "minValue": 5,
            "maxValue": 86400,
            "metadata": {
                "description": "Max lag time (seconds). Required for BoundedStaleness. Valid ranges, Single Region: 5 to 84600. Multi Region: 300 to 86400."
            }
        },
        "databaseName": {
            "type": "string",
            "metadata": {
                "description": "The name for the Mongo DB database"
            }
        },
        "throughput": {
            "type": "int",
            "defaultValue": 400,
            "minValue": 400,
            "maxValue": 1000000,
            "metadata": {
                "description": "The shared throughput for the Mongo DB database"
            }           
        },
        "collection1Name": {
            "type": "string",
            "metadata": {
                "description": "The name for the first Mongo DB collection"
            }
        },
        "collection2Name": {
            "type": "string",
            "metadata": {
                "description": "The name for the second Mongo DB collection"
            }
        }
    },
    "variables": {
        "accountName": "[toLower(parameters('accountName'))]",
        "consistencyPolicy": {
            "Eventual": {
                "defaultConsistencyLevel": "Eventual"
            },
            "ConsistentPrefix": {
                "defaultConsistencyLevel": "ConsistentPrefix"
            },
            "Session": {
                "defaultConsistencyLevel": "Session"
            },
            "BoundedStaleness": {
                "defaultConsistencyLevel": "BoundedStaleness",
                "maxStalenessPrefix": "[parameters('maxStalenessPrefix')]",
                "maxIntervalInSeconds": "[parameters('maxIntervalInSeconds')]"
            },
            "Strong": {
                "defaultConsistencyLevel": "Strong"
            }
        },
        "locations": 
        [ 
            {
                "locationName": "[parameters('primaryRegion')]",
                "failoverPriority": 0,
                "isZoneRedundant": false
            }, 
            {
                "locationName": "[parameters('secondaryRegion')]",
                "failoverPriority": 1,
                "isZoneRedundant": false
            }
        ]
    },
    "resources": 
    [
        {
            "type": "Microsoft.DocumentDB/databaseAccounts",
            "name": "[variables('accountName')]",
            "apiVersion": "2021-01-15",
            "location": "[parameters('location')]",
            "kind": "MongoDB",
            "properties": {
                "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
                "locations": "[variables('locations')]",
                "databaseAccountOfferType": "Standard",
                "apiProperties": {
                    "serverVersion": "[parameters('serverVersion')]"
                }
            }
        },
        {
            "type": "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases",
            "name": "[concat(variables('accountName'), '/', parameters('databaseName'))]",
            "apiVersion": "2021-01-15",
            "dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts/', variables('accountName'))]" ],
            "properties":{
                "resource":{
                    "id": "[parameters('databaseName')]"
                },
                "options": { "throughput": "[parameters('throughput')]" }
            }
        },
        {
            "type": "Microsoft.DocumentDb/databaseAccounts/mongodbDatabases/collections",
            "name": "[concat(variables('accountName'), '/', parameters('databaseName'), '/', parameters('collection1Name'))]",
            "apiVersion": "2021-01-15",
            "dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts/mongodbDatabases', variables('accountName'), parameters('databaseName'))]" ],
            "properties":
            {
                "resource":{
                    "id":  "[parameters('collection1Name')]",
                    "shardKey": { "user_id": "Hash" },
                    "indexes": [
                        {
                            "key": {
                                "keys": [ "_id" ]
                            }
                        },
                        {
                            "key": {
                                "keys": [
                                "$**"
                                ]
                            }
                        },
                        {
                            "key": { "keys":["user_id", "user_address"] },
                            "options": { "unique": true }
                        },
                        {
                            "key": { "keys":["_ts"] },
                            "options": { "expireAfterSeconds": 2629746 }
                        }
                    ],
                    "options": {
                        "If-Match": "<ETag>"
                    }
                }
            }
        },
        {
            "type": "Microsoft.DocumentDb/databaseAccounts/mongodbDatabases/collections",
            "name": "[concat(variables('accountName'), '/', parameters('databaseName'), '/', parameters('collection2Name'))]",
            "apiVersion": "2021-01-15",
            "dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts/mongodbDatabases', variables('accountName'),  parameters('databaseName'))]" ],
            "properties":
            {
                "resource":{
                    "id":  "[parameters('collection2Name')]",
                    "shardKey": { "company_id": "Hash" },
                    "indexes": [
                        {
                            "key": {
                                "keys": [ "_id" ]
                            }
                        },
                        {
                            "key": {
                                "keys": [
                                "$**"
                                ]
                            }
                        },                      
                        {
                            "key": { "keys":["company_id", "company_address"] },
                            "options": { "unique": true }
                        },
                        {
                            "key": { "keys":["_ts"] },
                            "options": { "expireAfterSeconds": 2629746 }
                        }
                    ],
                    "options": {
                        "If-Match": "<ETag>"
                    }
                }
            }
        }
    ]
}

后续步骤

下面是一些其他资源: