Inicio rápido: Solución de problemas de las implementaciones de plantillas de ARM JSON

En este inicio rápido se explica cómo solucionar errores de implementación de las plantillas de Azure Resource Manager (ARM) JSON. Configurará una plantilla con errores y aprenderá a corregirlos.

Una plantilla de Azure Resource Manager es un archivo de notación de objetos JavaScript (JSON) que define tanto la infraestructura como la configuración de un proyecto. La plantilla usa sintaxis declarativa. Se describe la implementación deseada sin escribir la secuencia de comandos de programación para crear la implementación.

Hay tres tipos de errores relacionados con una implementación:

  • Errores de validación, que se producen antes de que comience una implementación y son debidos a errores de sintaxis en el archivo. Un editor de código como Visual Studio Code puede identificar estos errores.
  • Los errores de validación previa se producen cuando se ejecuta un comando de implementación, pero los recursos no están implementados. Estos errores se encuentran sin iniciar la implementación. Por ejemplo, si un valor de parámetro es incorrecto, el error se encuentra en la validación previa.
  • Durante el proceso de implementación se producen errores de implementación, que solo se pueden encontrar evaluando el progreso de implementación en su entorno Azure.

Todos los tipos de errores devuelven un código de error que se usa para solucionar problemas de implementación. Los errores de validación y de comprobación previa se muestran en el registro de actividad, pero no aparecen en el historial de implementación.

Prerrequisitos

Para completar este inicio rápido, necesita los siguientes elementos:

Creación de una plantilla con errores

Copie la plantilla siguiente y guárdela localmente. Lo usará para solucionar problemas de validación, previos y de implementación. En este inicio rápido se da por supuesto que el archivo tiene el nombre troubleshoot.json, pero puede darle cualquier otro.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameterss": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    },
    "vnetResult": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
    }
  }
}

Corrección del error de validación

Abra el archivo en Visual Studio Code. Las líneas onduladas bajo parameterss: indican un error. Para ver el error de validación, mantenga el puntero sobre el error.

Screenshot of Visual Studio Code highlighting a template validation error with a red wavy line under the misspelled 'parameterss:' in the code.

Observará que variables y resources tienen errores de referencia de parámetros no definidos. Para mostrar los errores de validación de la plantilla, seleccione Ver>Problemas.

Screenshot of Visual Studio Code showing the Problems tab listing undefined parameter reference errors for 'variables' and 'resources' sections.

Todos los errores se producen por la ortografía incorrecta de un nombre de elemento.

"parameterss": {

El mensaje de error indica Error de validación de plantilla: No se pudo encontrar el miembro "parameterss" en el objeto de tipo "Plantilla". Ruta de acceso "parameterss", línea 4, posición 16.

La sintaxis de plantilla ARM para los parámetros muestra que parameters es el nombre de elemento correcto.

Para corregir el error de validación y los errores de referencia de parámetros no definidos, corrija la ortografía y guarde el archivo.

"parameters": {

Corrección del error previo

Para crear un error de validación previa, usará un valor incorrecto para el parámetro prefixName.

En este inicio rápido se usa troubleshootRG para el nombre del grupo de recursos, pero puede usar cualquier nombre.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=long!!StoragePrefix

Se produce un error de validación previa en la plantilla y la implementación no se ejecuta. prefixName tiene más de 11 caracteres y contiene caracteres especiales y letras mayúsculas.

Los nombres de almacenamiento deben tener entre 3 y 24 caracteres y solo pueden contener letras minúsculas y números. El valor de prefijo creó un nombre de almacenamiento no válido. Para más información, consulte Resolución de errores de nombres de cuenta de almacenamiento. Para corregir el error previo, use un prefijo de 11 caracteres o menos que solo contenga letras minúsculas o números.

Dado que la implementación no se ha ejecutado, no hay ningún historial de implementación.

Screenshot of Azure resource group overview page displaying an empty deployment history section due to a preflight error.

El registro de actividad muestra el error previo. Seleccione el registro para ver los detalles del error.

Screenshot of Azure resource group activity log showing a preflight error entry with a red exclamation mark icon.

Corrección del error de implementación

Ejecute la implementación con un valor de prefijo válido, como storage.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=storage

La implementación comienza y se puede ver en el historial de implementación. Se produce un error en la implementación porque outputs hace referencia a una red virtual que no existe en el grupo de recursos. Sin embargo, no hubo errores para la cuenta de almacenamiento, por lo que el recurso se implementó. El historial de implementación muestra una implementación con errores.

Screenshot of Azure resource group overview page showing a failed deployment with a red exclamation mark icon in the deployment history section.

Para corregir el error de implementación, cambie la función de referencia para usar un recurso válido. Para obtener más información, consulte Solución de errores de recurso no encontrado. En este inicio rápido, elimine la coma que precede a vnetResult y a todos los elementos vnetResult. Guarde el archivo y vuelva a ejecutar la implementación.

"vnetResult": {
  "type": "object",
  "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}

Una vez corregidos los errores de validación, comprobación previa e implementación, la plantilla siguiente implementa una cuenta de almacenamiento. El historial de implementación y el registro de actividad muestran una implementación correcta.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Limpieza de recursos

Cuando los recursos de Azure ya no sean necesarios, elimine el grupo de recursos.

az group delete --name troubleshootRG

Para eliminar el grupo de recursos del portal, siga estos pasos:

  1. En Azure Portal, escriba Grupo de recursos en el cuadro de búsqueda.
  2. Escriba el nombre del grupo de recursos en el campo Filtrar por nombre.
  3. Seleccione el nombre del grupo de recursos.
  4. Seleccione Eliminar grupo de recursos.
  5. Para confirmar la eliminación, escriba el nombre del grupo de recursos y seleccione Eliminar.

Pasos siguientes

En este inicio rápido ha aprendido a solucionar errores de implementación de plantillas de ARM.