Creación de plantillas del Administrador de recursos de Azure

Completado

La creación de una plantilla para una cuenta de Azure Cosmos DB for NoSQL es muy similar a la creación de una desde cero mediante el portal o desde la CLI. Hay tres recursos principales para definir en un orden de relación específico.

Plantilla vacía

Una plantilla de Azure Resource Manager es, en esencia, un archivo JSON con una sintaxis específica que debe seguir. La plantilla vacía mínima predeterminada es un documento JSON con una propiedad de esquema establecida en https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#, una propiedad contentVersion establecida en 1.0.0.0 y una matriz de recursos vacía. En este ejemplo se muestra una plantilla vacía mínima.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
  ]
}

Nota:

Todos los recursos que coloquemos en esta plantilla serán objetos JSON dentro de la matriz de recursos.

Recurso de cuenta

El primer tipo de recurso que se va a definir es Microsoft.DocumentDB/databaseAccounts. Esto representa una cuenta que no es específica de ninguna API. Si no se especifica la API, se deduce que es una cuenta de la API de NoSQL.

Un objeto para este recurso debe contener, como mínimo, las siguientes propiedades:

  • name
  • ubicación
  • properties.databaseAccountOfferType
  • properties.locations[].locationName

Este es un ejemplo de una cuenta que tiene un nombre único con el prefijo csmsarm y se implementa en Oeste de EE. UU.

{
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "apiVersion": "2021-05-15",
  "name": "[concat('csmsarm', uniqueString(resourceGroup().id))]",
  "location": "[resourceGroup().location]",
  "properties": {
    "databaseAccountOfferType": "Standard",
    "locations": [
      {
        "locationName": "westus"
      }
    ]
  }
}

Nota:

Puede definir más de una ubicación mediante la matriz de ubicaciones.

Recurso de base de datos

El siguiente recurso es de tipo Microsoft.DocumentDB/databaseAccounts/sqlDatabases y es un recurso secundario de la cuenta. Esta relación se define mediante la propiedad dependsOn.

Un objeto para este recurso debe contener, como mínimo, las siguientes propiedades:

  • name
  • properties.resources.id

Una base de datos también puede contener opcionalmente las siguientes propiedades:

  • properties.options.throughput
  • properties.options.autoscaleSettings.maxThroughput

Este es un ejemplo de una base de datos llamada cosmicworks.

{
  "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
  "apiVersion": "2021-05-15",
  "name": "[concat('csmsarm', uniqueString(resourceGroup().id), '/cosmicworks')]",
  "dependsOn": [
    "[resourceId('Microsoft.DocumentDB/databaseAccounts', concat('csmsarm', uniqueString(resourceGroup().id)))]"
  ],
  "properties": {
    "resource": {
      "id": "cosmicworks"
    }
  }
}

Recurso de contenedor

Dentro de una base de datos, puede definir varios recursos Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers secundarios. Aquí, puede asignar el rendimiento, configurar la directiva de indexación y establecer una ruta de acceso de clave de partición.

Un objeto contenedor debe contener, como mínimo, las siguientes propiedades:

  • name
  • properties.resource.id
  • properties.resource.partitionkey.paths[]

Una contenedor también puede contener opcionalmente las siguientes propiedades:

  • properties.options.throughput
  • properties.options.autoscaleSettings.maxThroughput
  • properties.resource.indexingPolicy

Este es un ejemplo de un contenedor denominado products, tiene un rendimiento de 400 RU/s y una ruta de acceso de clave de partición de /categoryId.

{
  "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers",
  "apiVersion": "2021-05-15",
  "name": "[concat('csmsarm', uniqueString(resourceGroup().id), '/cosmicworks/products')]",
  "dependsOn": [
    "[resourceId('Microsoft.DocumentDB/databaseAccounts', concat('csmsarm', uniqueString(resourceGroup().id)))]",
    "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', concat('csmsarm', uniqueString(resourceGroup().id)), 'cosmicworks')]"
  ],
  "properties": {
    "options": {
      "throughput": 400
    },
    "resource": {
      "id": "products",
      "partitionKey": {
        "paths": [
          "/categoryId"
        ]
      }
    }
  }
}

Plantilla final

Ahora que se han establecido todos los recursos, el archivo de plantilla debe contener ahora el código siguiente.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.DocumentDB/databaseAccounts",
      "apiVersion": "2021-05-15",
      "name": "[concat('csmsarm', uniqueString(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "properties": {
        "databaseAccountOfferType": "Standard",
        "locations": [
          {
            "locationName": "westus"
          }
        ]
      }
    },
    {
      "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
      "apiVersion": "2021-05-15",
      "name": "[concat('csmsarm', uniqueString(resourceGroup().id), '/cosmicworks')]",
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts', concat('csmsarm', uniqueString(resourceGroup().id)))]"
      ],
      "properties": {
        "resource": {
          "id": "cosmicworks"
        }
      }
    },
    {
      "type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers",
      "apiVersion": "2021-05-15",
      "name": "[concat('csmsarm', uniqueString(resourceGroup().id), '/cosmicworks/products')]",
      "dependsOn": [
        "[resourceId('Microsoft.DocumentDB/databaseAccounts', concat('csmsarm', uniqueString(resourceGroup().id)))]",
        "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', concat('csmsarm', uniqueString(resourceGroup().id)), 'cosmicworks')]"
      ],
      "properties": {
        "options": {
          "throughput": 400
        },
        "resource": {
          "id": "products",
          "partitionKey": {
            "paths": [
              "/categoryId"
            ]
          }
        }
      }
    }
  ]
}