Administración de directivas de índice a través de plantillas de Azure Resource Manager

Completado

Es habitual definir una directiva de indexación como parte de la implementación de una cuenta de Azure Cosmos DB y sus recursos de forma automatizada. La sintaxis de JSON y Bicep para las plantillas de Azure Resource Manager admite la definición de directivas de indexación de forma nativa. Sin embargo, la sintaxis puede ser complicada si no la ha probado antes.

Para los ejemplos de esta unidad, imagine que quiere implementar la siguiente directiva de indexación en el contenedor products.

Definición de una directiva de indexación en plantillas JSON

Supongamos que queremos implementar la siguiente directiva de indexación en nuestro contenedor products de nuestra cuenta.

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/price/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

El objeto indexingPolicy se puede elevar sin cambios y establecer en la propiedad properties.resource.indexingPolicy de Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers.

{
  "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"
        ]
      },
      "indexingPolicy": {
        "indexingMode": "consistent",
        "automatic": true,
        "includedPaths": [
          {
            "path": "/price/*"
          }
        ],
        "excludedPaths": [
          {
            "path": "/*"
          }
        ]
      }
    }
  }
}

Definición de una directiva de indexación en plantillas Bicep

Supongamos que queremos implementar la siguiente directiva de indexación en nuestro contenedor customers de nuestra cuenta.

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/address/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

Se requieren algunos cambios pequeños para usar esta directiva de indexación en Bicep. Entre estos cambios se incluyen los siguientes:

  • Eliminación de las comillas dobles de los nombres de propiedad
  • Cambio de valores de propiedad de comillas dobles a simples
  • Eliminación de comas normalmente necesarias en JSON
resource Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2021-05-15' = {
  parent: Database
  name: 'customers'
  properties: {
    resource: {
      id: 'customers'
      partitionKey: {
        paths: [
          '/regionId'
        ]
      }
      indexingPolicy: {
        indexingMode: 'consistent'
        automatic: true
        includedPaths: [
          {
            path: '/address/*'
          }
        ]
        excludedPaths: [
          {
            path: '/*'
          }
        ]
      }
    }
  }
}

Actualización de una directiva de indexación en un contenedor existente

Si ya existe un recurso de tipo Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers y todas las demás propiedades coinciden, puede actualizar la directiva de indexación cambiando únicamente los valores de la propiedad properties.resource.indexingPolicy. Azure Resource Manager solo cambiará la directiva de indexación, manteniendo intacto el resto del contenedor.

El comando para la implementación es el mismo que el de la implementación inicial.

az deployment group create \
    --resource-group '<resource-group>' \
    --template-file '.\template.json' \
    --name 'jsontemplatedeploy'
az deployment group create \
    --resource-group '<resource-group>' \
    --template-file '.\template.bicep' \
    --name 'biceptemplatedeploy'