Démarrage rapide : Résolution des problèmes de déploiement JSON de modèles ARM

Ce guide de démarrage rapide explique comment résoudre les erreurs de déploiement JSON des modèles Azure Resource Manager (ARM). Vous allez configurer un modèle avec des erreurs et apprendre à corriger les erreurs.

Un modèle Azure Resource Manager est un fichier JSON (JavaScript Object Notation) qui définit l’infrastructure et la configuration de votre projet. Le modèle utilise la syntaxe déclarative. Vous décrivez votre déploiement prévu sans écrire la séquence de commandes de programmation pour créer le déploiement.

Il existe trois types d’erreurs liées à un déploiement :

  • Les erreurs de validation se produisent avant le début d’un déploiement et sont provoquées par des erreurs de syntaxe dans votre fichier. Un éditeur de code comme Visual Studio Code peut identifier ces erreurs.
  • Des erreurs de validation préalable se produisent lorsqu’une commande de déploiement est exécutée, mais que les ressources ne sont pas déployées. Ces erreurs sont détectées sans commencer le déploiement. Par exemple, si une valeur de paramètre est incorrecte, l’erreur est détectée lors de la validation préalable.
  • Les erreurs de déploiement se produisent pendant le processus de déploiement et ne peuvent être détectées qu’en évaluant la progression du déploiement dans votre environnement Azure.

Tous les types d’erreurs retournent un code d’erreur que vous utilisez pour résoudre les problèmes de déploiement. Les erreurs de validation et les erreurs de vérification préalable sont affichées dans le journal d’activité, mais n’apparaissent pas dans votre historique de déploiement.

Prérequis

Pour suivre ce guide de démarrage rapide, vous devez disposer des éléments suivants :

Création d’un modèle comportant des erreurs

Copiez le modèle suivant et enregistrez-le localement. Vous allez utiliser ce fichier pour résoudre une erreur de validation, une erreur validation préalable et une erreur de déploiement. Ce guide de démarrage rapide part du principe que vous avez nommé le fichier troubleshoot.json, mais vous pouvez lui attribuer n’importe quel nom.

{
  "$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')]"
    }
  }
}

Corriger une erreur de validation

Ouvrez le fichier dans Visual Studio Code. La ligne ondulée sous parameterss: indique une erreur. Pour afficher l’erreur de validation, pointez sur l’erreur.

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

Vous remarquerez que variables et resources présentent des erreurs liées à une référence de paramètre non définie. Pour afficher les erreurs de validation du modèle, sélectionnez Afficher>Problèmes.

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

Toutes les erreurs sont dues à l’orthographe incorrecte d’un nom d’élément.

"parameterss": {

Le message d’erreur indique que Échec de la validation du modèle : le membre « parameterss » est introuvable sur l’objet de type « Template ». Chemin « parameterss », ligne 4, position 16.

La syntaxe du modèle ARM pour parameters indique que parameters est le nom d’élément correct.

Pour corriger l’erreur de validation et les erreurs de référence de paramètre non définie, corrigez l’orthographe et enregistrez le fichier.

"parameters": {

Corriger une erreur de validation préalable

Pour créer une erreur de validation préalable, vous affecterez une valeur incorrecte au paramètre prefixName.

Ce guide de démarrage rapide utilise troubleshootRG comme nom du groupe de ressources, mais vous pouvez utiliser n’importe quel nom.

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

La validation préalable du modèle échoue et le déploiement n’est pas exécuté. Le prefixName comporte plus de 11 caractères, et contient des caractères spéciaux et des lettres majuscules.

Les noms de stockage doivent avoir entre 3 et 24 caractères de type lettres minuscules et chiffres. La valeur de préfixe a créé un nom de stockage non valide. Pour plus d’informations, voir Résoudre les erreurs liées aux noms de compte de stockage. Pour corriger l’erreur de vérification préalable, utilisez un préfixe de 11 caractères ou moins et ne contenant que des lettres minuscules ou des chiffres.

Étant donné que le déploiement n’a pas été exécuté, il n’y a pas d’historique de déploiement.

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

Le journal d’activité affiche l’erreur de vérification préalable. Sélectionnez le journal pour afficher les détails de l’erreur.

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

Corriger une erreur de déploiement

Exécutez le déploiement avec une valeur de préfixe valide, comme storage.

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

Le déploiement commence et est visible dans l’historique des déploiements. Le déploiement échoue car outputs référence un réseau virtuel qui n’existe pas dans le groupe de ressources. Toutefois, aucune erreur n’a été détectée pour le compte de stockage. La ressource est donc déployée. L’historique des déploiements montre un échec de déploiement.

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

Pour corriger l’erreur de déploiement, modifiez la fonction de référence de façon à utiliser une ressource valide. Pour plus d’informations, consultez Résoudre les erreurs liées à des ressources introuvables. Pour ce guide de démarrage rapide, supprimez la virgule qui précède vnetResult et tout vnetResult. Enregistrez le fichier et réexécutez le déploiement.

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

Une fois les erreurs de validation, de vérification préalable et de déploiement corrigées, le modèle suivant déploie un compte de stockage. L’historique des déploiements et le journal d’activité affichent un déploiement réussi.

{
  "$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')]"
    }
  }
}

Nettoyer les ressources

Lorsque les ressources Azure ne sont plus nécessaires, supprimez le groupe de ressources.

az group delete --name troubleshootRG

Pour supprimer le groupe de ressources à partir du portail, procédez comme suit :

  1. Dans le portail Azure, entrez Groupes de ressources dans la zone de recherche.
  2. Dans le champ Filtrer par nom, entrez le nom du groupe de ressources.
  3. Sélectionnez le nom du groupe de ressources.
  4. Sélectionnez Supprimer le groupe de ressources.
  5. Pour confirmer la suppression, entrez le nom du groupe de ressources, puis sélectionnez Supprimer.

Étapes suivantes

Dans ce guide de démarrage rapide, vous avez appris à résoudre les erreurs de déploiement des modèles ARM.