Creación y uso de MongoDB en Azure con Cosmos DB

Un recurso de Cosmos DB proporciona un recurso de MongoDB para usarlo con los paquetes del proveedor de MongoDB que se encuentran en npm.

Cosmos DB es una base de datos de NoSQL completamente administrada, con replicación geográfica y de alto rendimiento, que proporciona una capa de compatibilidad con MongoDB. Puede hacer que una aplicación de JavaScript existente apunte a ella (o cualquier herramienta o cliente de MongoDB) sin necesidad de cambiar nada salvo la cadena de conexión.

Creación de un recurso de Cosmos DB para MongoDB con la CLI de Azure

Use el siguiente comando az cosmosdb create de la CLI de Azure en Azure Cloud Shell para crear un nuevo recurso de Cosmos DB para una base de datos MongoDB.

az cosmosdb create \
    --subscription YOUR-SUBSCRIPTION-ID-OR-NAME \
    --resource-group YOUR-RESOURCE-GROUP \
    --name YOUR-RESOURCE_NAME \
    --locations regionName=eastus \
    --kind MongoDB \
    --enable-public-network true \
    --ip-range-filter 123.123.123.123 

Reemplace 123.123.123.123 por su propia dirección IP de cliente o quite el parámetro por completo.

Este comando puede tardar un par de minutos en completarse y crea un recurso disponible públicamente en la región eastus.

{
  "apiProperties": {
    "serverVersion": "3.6"
  },
  "capabilities": [
    {
      "name": "EnableMongo"
    }
  ],
  "connectorOffer": null,
  "consistencyPolicy": {
    "defaultConsistencyLevel": "Session",
    "maxIntervalInSeconds": 5,
    "maxStalenessPrefix": 100
  },
  "cors": [],
  "databaseAccountOfferType": "Standard",
  "disableKeyBasedMetadataWriteAccess": false,
  "documentEndpoint": "https://mongo-2.documents.azure.com:443/",
  "enableAnalyticalStorage": false,
  "enableAutomaticFailover": false,
  "enableCassandraConnector": null,
  "enableFreeTier": false,
  "enableMultipleWriteLocations": false,
  "failoverPolicies": [
    {
      "failoverPriority": 0,
      "id": "mongodb-2",
      "locationName": "East US"
    }
  ],
  "id": "/subscriptions/.../resourceGroups/my-resource-group/providers/Microsoft.DocumentDB/databaseAccounts/mongo-2",
  "ipRules": [
    {
      "ipAddressOrRange": "123.123.123.123"
    }
  ],
  "isVirtualNetworkFilterEnabled": false,
  "keyVaultKeyUri": null,
  "kind": "MongoDB",
  "location": "Central US",
  "locations": [
    {
      "documentEndpoint": "https://mongodb-2.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "mongodb-2",
      "isZoneRedundant": false,
      "locationName": "East US",
      "provisioningState": "Succeeded"
    }
  ],
  "name": "mongo-2",
  "privateEndpointConnections": null,
  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "readLocations": [
    {
      "documentEndpoint": "https://mongodb-2.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "mongodb-2",
      "isZoneRedundant": false,
      "locationName": "East US",
      "provisioningState": "Succeeded"
    }
  ],
  "resourceGroup": "my-resource-group",
  "systemData": {
    "createdAt": "2021-02-08T20:21:05.9519342Z"
  },
  "tags": {},
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "virtualNetworkRules": [],
  "writeLocations": [
    {
      "documentEndpoint": "https://mongodb-2.documents.azure.com:443/",
      "failoverPriority": 0,
      "id": "mongodb-2",
      "isZoneRedundant": false,
      "locationName": "East US",
      "provisioningState": "Succeeded"
    }
  ]
}

Adición de una regla de firewall para la dirección IP del cliente con la CLI de Azure

De forma predeterminada, las reglas de firewall no están configuradas. Debe agregar la dirección IP de cliente para que la conexión del cliente al servidor con JavaScript sea correcta.

Use el comando az cosmosdb update para actualizar las reglas de firewall.

az cosmosdb update \
    --subscription YOUR-SUBSCRIPTION-ID-OR-NAME \
    --resource-group YOUR-RESOURCE-GROUP \
    --name YOUR-RESOURCE_NAME \
    --ip-range-filter 123.123.123.123

Para configurar varias direcciones IP, use una lista separada por comas.

az cosmosdb update \
    --subscription YOUR-SUBSCRIPTION-ID-OR-NAME \
    --resource-group YOUR-RESOURCE-GROUP \
    --name YOUR-RESOURCE_NAME \
    --ip-range-filter 123.123.123.123,456.456.456.456

Obtención de la cadena de conexión de MongoDB para el recurso con la CLI de Azure

Recupere la cadena de conexión de MongoDB para esta instancia con el comando az cosmosdb keys list:

az cosmosdb keys list \
    --subscription YOUR-SUBSCRIPTION-ID-OR-NAME \
    --resource-group YOUR-RESOURCE-GROUP \
    --name YOUR-RESOURCE-NAME \
    --type connection-strings 

Esto devuelve 4 cadenas de conexión, 2 de lectura y escritura y 2 de solo lectura. Hay dos, por lo que puede proporcionar a dos sistemas o desarrolladores diferentes una cadena de conexión para su uso de forma individual.

Conéctese a la base de datos mongoDB con una cadena de conexión. Asegúrese de que el servicio está disponible con una de las siguientes opciones:

  • disponible públicamente
  • configuración del firewall para la dirección IP del cliente

Configuración de la aplicación web de Azure con la cadena de conexión con la CLI de Azure

Agregue una variable de entorno MONGODB_URL de la aplicación web de Azure con az webapp config appsettings set para que la aplicación web se conecte al recurso de Cosmos DB:

az webapp config appsettings set \
    --subscription YOUR-SUBSCRIPTION-ID-OR-NAME \
    --resource-group YOUR-RESOURCE-GROUP \
    --name YOUR-RESOURCE_NAME \
    --settings MONGODB_URL=YOUR-CONNECTION-STRING

Pasos siguientes