إدارة Azure Cosmos DB لموارد MongoDB باستخدام قوالب Azure Resource Manager

ينطبق على: MongoDB

في هذه المقالة، ستتعلم كيفية استخدام قوالب Azure Resource Manager للمساعدة في نشر حسابات Azure Cosmos DB وإدارتها لواجهة برمجة التطبيقات ل MongoDB وقواعد البيانات والمجموعات.

تحتوي هذه المقالة على أمثلة لواجهة برمجة تطبيقات Azure Cosmos DB لـ MongoDB فقط، للعثور على أمثلة لحسابات نوع API الأخرى، راجع: استخدام قوالب Azure Resource Manager مع واجهة برمجة تطبيقات Azure Cosmos DB لـ Cassandra وGremlin وSQL وTable.

هام

  • تقتصر أسماء الحسابات على 44 حرفًا، وكلها بأحرف إنجليزية صغيرة.
  • لتغيير قيم معدل النقل، أعد توزيع القالب باستخدام RU/s المحدثة.
  • عند إضافة مواقع أو إزالتها إلى حساب Azure Cosmos DB، لا يمكنك تعديل خصائص أخرى في نفس الوقت. تتم هذه العمليات بشكل منفصل.

لإنشاء أي من موارد Azure Cosmos DB أدناه، انسخ قالب المثال التالي إلى ملف json جديد. يمكنك إنشاء ملف json للمعلمات اختيارياً لاستخدامه عند توزيع مثيلات متعددة لنفس المورد بأسماء وقيم مختلفة. هناك العديد من الطرق لنشر قوالب Azure Resource Manager بما في ذلك، مدخل Microsoft Azure وAzure CLI وAzure PowerShell وGitHub.

حساب Azure Cosmos DB ل MongoDB مع معدل النقل المزود بالتحجيم التلقائي

سيقوم هذا القالب بإنشاء حساب Azure Cosmos DB لواجهة برمجة التطبيقات ل MongoDB (3.2 و3.6 و4.0 و4.2) مع مجموعتين تشتركان في معدل نقل التحجيم التلقائي على مستوى قاعدة البيانات. يتوفر هذا القالب أيضاً للتوزيع بنقرة واحدة من معرض قوالب Azure Quickstart.

زر لنشر قالب Resource Manager إلى Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.6.18.56646",
      "templateHash": "3095519724929260960"
    }
  },
  "parameters": {
    "accountName": {
      "type": "string",
      "defaultValue": "[toLower(format('mongodb-{0}', 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": {
      "type": "string",
      "defaultValue": "4.2",
      "allowedValues": [
        "3.2",
        "3.6",
        "4.0",
        "4.2"
      ],
      "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,
      "maxValue": 2147483647,
      "minValue": 10,
      "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,
      "maxValue": 86400,
      "minValue": 5,
      "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": 1000,
      "maxValue": 1000000,
      "minValue": 1000,
      "metadata": {
        "description": "Maximum throughput when using Autoscale Throughput Policy for the Database"
      }
    }
  },
  "variables": {
    "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",
      "apiVersion": "2021-10-15",
      "name": "[parameters('accountName')]",
      "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",
      "apiVersion": "2021-10-15",
      "name": "[format('{0}/{1}', parameters('accountName'), parameters('databaseName'))]",
      "properties": {
        "resource": {
          "id": "[parameters('databaseName')]"
        },
        "options": {
          "autoscaleSettings": {
            "maxThroughput": "[parameters('autoscaleMaxThroughput')]"
          }
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName'))]"
      ]
    },
    {
      "type": "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections",
      "apiVersion": "2021-10-15",
      "name": "[format('{0}/{1}/{2}', parameters('accountName'), parameters('databaseName'), parameters('collection1Name'))]",
      "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>"
          }
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts/mongodbDatabases', parameters('accountName'), parameters('databaseName'))]"
      ]
    },
    {
      "type": "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections",
      "apiVersion": "2021-10-15",
      "name": "[format('{0}/{1}/{2}', parameters('accountName'), parameters('databaseName'), parameters('collection2Name'))]",
      "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>"
          }
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts/mongodbDatabases', parameters('accountName'), parameters('databaseName'))]"
      ]
    }
  ]
}

حساب Azure Cosmos DB ل MongoDB مع معدل النقل القياسي المقدم

سيقوم هذا القالب بإنشاء حساب Azure Cosmos DB لواجهة برمجة التطبيقات ل MongoDB (3.2 و3.6 و4.0 و4.2) مع مجموعتين تشتركان في معدل نقل قياسي (يدوي) 400 وحدة طلب/ثانية على مستوى قاعدة البيانات. يتوفر هذا القالب أيضاً للتوزيع بنقرة واحدة من معرض قوالب Azure Quickstart.

زر لنشر قالب Resource Manager إلى Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.9.1.41621",
      "templateHash": "6120132423365709425"
    }
  },
  "parameters": {
    "accountName": {
      "type": "string",
      "defaultValue": "[format('mongodb-{0}', 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": "Eventual",
      "metadata": {
        "description": "The default consistency level of the Cosmos DB account."
      },
      "allowedValues": [
        "Eventual",
        "ConsistentPrefix",
        "Session",
        "BoundedStaleness",
        "Strong"
      ]
    },
    "serverVersion": {
      "type": "string",
      "defaultValue": "4.2",
      "metadata": {
        "description": "Specifies the MongoDB server version to use."
      },
      "allowedValues": [
        "3.2",
        "3.6",
        "4.0",
        "4.2"
      ]
    },
    "maxStalenessPrefix": {
      "type": "int",
      "defaultValue": 100000,
      "metadata": {
        "description": "Max stale requests. Required for BoundedStaleness. Valid ranges, Single Region: 10 to 2147483647. Multi Region: 100000 to 2147483647."
      },
      "maxValue": 2147483647,
      "minValue": 10
    },
    "maxIntervalInSeconds": {
      "type": "int",
      "defaultValue": 300,
      "metadata": {
        "description": "Max lag time (seconds). Required for BoundedStaleness. Valid ranges, Single Region: 5 to 84600. Multi Region: 300 to 86400."
      },
      "maxValue": 86400,
      "minValue": 5
    },
    "databaseName": {
      "type": "string",
      "metadata": {
        "description": "The name for the Mongo DB database"
      }
    },
    "sharedThroughput": {
      "type": "int",
      "defaultValue": 400,
      "metadata": {
        "description": "The shared throughput for the Mongo DB database, up to 25 collections"
      },
      "maxValue": 1000000,
      "minValue": 400
    },
    "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"
      }
    },
    "dedicatedThroughput": {
      "type": "int",
      "defaultValue": 400,
      "metadata": {
        "description": "The dedicated throughput for the orders collection"
      },
      "maxValue": 1000000,
      "minValue": 400
    }
  },
  "variables": {
    "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",
      "apiVersion": "2022-05-15",
      "name": "[toLower(parameters('accountName'))]",
      "location": "[parameters('location')]",
      "kind": "MongoDB",
      "properties": {
        "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
        "locations": "[variables('locations')]",
        "databaseAccountOfferType": "Standard",
        "enableAutomaticFailover": true,
        "apiProperties": {
          "serverVersion": "[parameters('serverVersion')]"
        },
        "capabilities": [
          {
            "name": "DisableRateLimitingResponses"
          }
        ]
      }
    },
    {
      "type": "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases",
      "apiVersion": "2022-05-15",
      "name": "[format('{0}/{1}', toLower(parameters('accountName')), parameters('databaseName'))]",
      "properties": {
        "resource": {
          "id": "[parameters('databaseName')]"
        },
        "options": {
          "throughput": "[parameters('sharedThroughput')]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts', toLower(parameters('accountName')))]"
      ]
    },
    {
      "type": "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections",
      "apiVersion": "2022-05-15",
      "name": "[format('{0}/{1}/{2}', toLower(parameters('accountName')), parameters('databaseName'), parameters('collection1Name'))]",
      "properties": {
        "resource": {
          "id": "[parameters('collection1Name')]",
          "shardKey": {
            "user_id": "Hash"
          },
          "indexes": [
            {
              "key": {
                "keys": [
                  "_id"
                ]
              }
            },
            {
              "key": {
                "keys": [
                  "$**"
                ]
              }
            },
            {
              "key": {
                "keys": [
                  "product_name",
                  "product_category_name"
                ]
              }
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts/mongodbDatabases', toLower(parameters('accountName')), parameters('databaseName'))]"
      ]
    },
    {
      "type": "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections",
      "apiVersion": "2022-05-15",
      "name": "[format('{0}/{1}/{2}', toLower(parameters('accountName')), parameters('databaseName'), parameters('collection2Name'))]",
      "properties": {
        "resource": {
          "id": "[parameters('collection2Name')]",
          "shardKey": {
            "company_id": "Hash"
          },
          "indexes": [
            {
              "key": {
                "keys": [
                  "_id"
                ]
              }
            },
            {
              "key": {
                "keys": [
                  "$**"
                ]
              }
            },
            {
              "key": {
                "keys": [
                  "customer_id",
                  "order_id"
                ]
              }
            }
          ]
        },
        "options": {
          "throughput": "[parameters('dedicatedThroughput')]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts/mongodbDatabases', toLower(parameters('accountName')), parameters('databaseName'))]"
      ]
    }
  ]
}

الخطوات التالية

فيما يأتي بعض الموارد الإضافية: