Exercice : ajoutez des paramètres et des sorties à votre modèle Azure Resource Manager

Effectué

Dans cet exercice, vous allez ajouter un paramètre pour définir le nom du compte de stockage Azure lors du déploiement. Vous ajouterez ensuite un paramètre pour définir les références SKU du compte de stockage qui sont autorisées et celle à utiliser pour ce déploiement. Vous ajouterez également une fonction utile au modèle Azure Resource Manager (modèle ARM) en ajoutant une sortie que vous pourrez utiliser plus tard dans le processus de déploiement.

Créer des paramètres pour le modèle ARM

Ici, vous allez rendre votre modèle ARM plus flexible en ajoutant des paramètres qui peuvent être définis au moment de l’exécution. Créez un paramètre pour la valeur storageName.

  1. Dans le fichier azuredeploy.json dans Visual Studio Code, placez votre curseur entre les accolades dans l’attribut parameters. Il se présente comme ceci : "parameters":{},

  2. Sélectionnez Entrée, puis entrez par. Une liste d’extraits associés s’affiche. Choisissez new-parameter, qui ajoute un paramètre générique au modèle. Elle se présente comme suit :

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. Changez le nom du paramètre en remplaçant parameter1 par storageName et laissez string comme type. Ajoutez une valeur minLength de 3 et une valeur maxLength de 24. Ajoutez comme valeur de la description The name of the Azure storage resource (Le nom de la ressource de stockage Azure).

  4. Le bloc de paramètres doit se présenter comme suit :

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. Utilisez le nouveau paramètre dans le bloc resources dans les valeurs name et displayName. L’intégralité du fichier va ressembler à ceci :

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[parameters('storageName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS",
            "tier": "Standard"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Enregistrez le fichier.

Déployer le modèle ARM paramétré

Ici, vous allez changer le nom du déploiement pour mieux refléter ce que fait ce déploiement et renseigner une valeur pour le nouveau paramètre.

Exécutez les commandes Azure CLI suivantes dans le terminal. Cet extrait de code contient le même code que celui utilisé précédemment, mais le nom du déploiement est changé. Renseignez un nom unique pour le paramètre storageName. Rappelez-vous que ce nom doit être unique dans tout Azure. Vous pouvez utiliser le nom unique que vous avez créé dans la dernière unité. Dans ce cas, Azure met à jour la ressource au lieu d’en créer une nouvelle.

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

Exécutez les commandes Azure PowerShell suivantes dans le terminal. Cet extrait de code contient le même code que celui utilisé précédemment, mais le nom du déploiement est changé. Renseignez un nom unique pour le paramètre storageName. Rappelez-vous que ce nom doit être unique dans tout Azure. Vous pouvez utiliser le nom unique que vous avez créé dans la dernière unité. Dans ce cas, Azure met à jour la ressource au lieu d’en créer une nouvelle.

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

Vérifier votre déploiement

  1. Une fois le déploiement terminé, revenez au portail Azure dans votre navigateur. Accédez à votre groupe de ressources et vérifiez qu’il y a maintenant 3 déploiements réussis. Sélectionnez ce lien.

    Notez que les trois déploiements se trouvent dans la liste.

  2. Explorez le déploiement addnameparameter comme vous l’avez fait précédemment.

Ajouter un autre paramètre pour limiter les valeurs autorisées

Ici, vous allez utiliser des paramètres pour limiter les valeurs autorisées pour un paramètre.

  1. Placez le curseur après l’accolade fermante pour le paramètre storageName. Ajoutez une virgule, puis sélectionnez Entrée.

  2. Entrez à nouveau par et sélectionnez new-parameter.

  3. Remplacez le nouveau paramètre générique par ce qui suit :

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

    Ici, vous listez les valeurs que ce paramètre autorisera. Si le modèle s’exécute avec une valeur qui n’est pas autorisée, le déploiement échoue.

  4. Ajoutez un commentaire à ce paramètre.

    Screenshot of the azuredeploy.json file showing the comment This is the allowed values for an Azure storage account in the line preceding the storageSKU parameter.

    Les modèles ARM prennent en charge les commentaires // et /* */.

  5. Mettez à jour la section resources de façon à ce qu’elle utilise le paramètre storageSKU. Tirez parti de la fonctionnalité IntelliSense de Visual Studio Code pour faciliter cette étape.

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    L’intégralité du fichier va ressembler à ceci :

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[parameters('storageName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]",
            "tier": "Standard"
          }
        }
      ],
      "outputs": {}
    }
    
  6. Enregistrez le fichier.

Déployer le modèle ARM

Ici, vous réussissez le déploiement en utilisant un paramètre storageSKU qui se trouve dans la liste autorisée. Ensuite, vous tentez de déployer le modèle en utilisant un paramètre storageSKU qui ne figure pas dans la liste autorisée. Le deuxième déploiement échouera comme prévu.

  1. Pour déployer le modèle, exécutez les commandes suivantes. Renseignez un nom unique pour le paramètre storageName. Rappelez-vous que ce nom doit être unique dans tout Azure. Vous pouvez utiliser le nom unique que vous avez créé dans la dernière section. Dans ce cas, Azure met à jour la ressource au lieu d’en créer une nouvelle.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

    Laissez le déploiement se terminer. Ce déploiement est correctement effectué. Les valeurs autorisées empêchent les utilisateurs de votre modèle de transmettre des valeurs de paramètre qui ne fonctionnent pas pour la ressource. Voyons ce qui se passe lorsque vous fournissez une référence SKU non valide.

  2. Exécutez les commandes suivantes pour déployer le modèle avec un paramètre qui n’est pas autorisé. Ici, vous avez changé le paramètre storageSKU en Basic (De base). Renseignez un nom unique pour le paramètre storageName. Rappelez-vous que ce nom doit être unique dans tout Azure. Vous pouvez utiliser le nom unique que vous avez créé dans la dernière section. Dans ce cas, Azure met à jour la ressource au lieu d’en créer une nouvelle.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    Échec de ce déploiement. Notez l’erreur.

    Screenshot of the Terminal window showing the deployment validation error.

  1. Pour déployer le modèle, exécutez les commandes suivantes. Renseignez un nom unique pour le paramètre storageName. Rappelez-vous que ce nom doit être unique dans tout Azure. Vous pouvez utiliser le nom unique que vous avez créé dans la dernière section. Dans ce cas, Azure met à jour la ressource au lieu d’en créer une nouvelle.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

    Laissez le déploiement se terminer. Ce déploiement est correctement effectué. Les valeurs autorisées empêchent les utilisateurs de votre modèle de transmettre des valeurs de paramètre qui ne fonctionnent pas pour la ressource. Voyons ce qui se passe lorsque vous fournissez une référence SKU non valide.

  2. Exécutez les commandes suivantes pour déployer le modèle avec un paramètre qui n’est pas autorisé. Ici, vous avez changé le paramètre storageSKU en Basic (De base). Renseignez un nom unique pour le paramètre storageName. Rappelez-vous que ce nom doit être unique dans tout Azure. Vous pouvez utiliser le nom unique que vous avez créé dans la dernière section. Dans ce cas, Azure met à jour la ressource au lieu d’en créer une nouvelle.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    Échec de ce déploiement. Notez l’erreur.

    Screenshot of the Terminal window showing the deployment validation error.

Ajouter une sortie au modèle ARM

Ici, vous allez faire un ajout à la section outputs du modèle ARM afin de générer des points de terminaison en sortie pour la ressource de compte de stockage.

  1. Dans le fichier azuredeploy.json dans Visual Studio Code, placez votre curseur entre les accolades dans l’attribut "outputs":{},.

  2. Appuyez sur Entrée, puis entrez out pour obtenir une liste d’extraits de code associés. Sélectionnez new-output. Ceci ajoute une sortie générique au modèle. Voici le résultat :

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. Remplacez "output1" par "storageEndpoint", puis remplacez la valeur de type par "object". Remplacez la valeur de value par "[reference(parameters('storageName')).primaryEndpoints]". Cette expression est celle que nous avons décrite dans l’unité précédente, qui obtient les données du point de terminaison. Comme nous avons spécifié object comme type, l’objet est retourné au format JSON.

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. Enregistrez le fichier.

Déployer le modèle ARM avec une sortie

Ici, vous allez déployer le modèle et voir la sortie des points de terminaison au format JSON. Vous devez renseigner un nom unique pour le paramètre storageName. Rappelez-vous que ce nom doit être unique dans tout Azure. Vous pouvez utiliser le nom unique que vous avez créé dans la dernière section. Dans ce cas, Azure met à jour la ressource au lieu d’en créer une nouvelle.

  1. Pour déployer le modèle, exécutez les commandes suivantes. Veillez à remplacer {your-unique-name} par une chaîne qui est unique.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    Notez le résultat.

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

  1. Pour déployer le modèle, exécutez les commandes suivantes. Veillez à remplacer {your-unique-name} par une chaîne qui est unique.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    Notez le résultat.

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

Vérifier votre déploiement de sortie

Dans le portail Azure, accédez à votre déploiement addOutputs. Vous pouvez également y trouver votre sortie.

Screenshot of the Azure portal showing the output selection in the left menu.