Ajouter de la flexibilité à votre modèle Azure Resource Manager à l’aide de paramètres et de sorties

Effectué

Dans la dernière unité, vous avez créé un modèle Azure Resource Manager (ARM) auquel vous avez ajouté un compte de stockage Azure. Vous avez peut-être remarqué qu’il y a un problème avec votre modèle. Le nom du compte de stockage est codé en dur. Vous pouvez utiliser ce modèle uniquement pour déployer le même compte de stockage à chaque fois. Pour déployer un compte de stockage avec un nom différent, vous devez créer un nouveau modèle, ce qui n’est pas un moyen pratique d’automatiser vos déploiements. La référence SKU du compte de stockage est également codée en dur, ce qui signifie que vous ne pouvez pas changer le type de compte de stockage selon les environnements. N’oubliez pas que dans notre scénario, chaque déploiement peut avoir un type de compte de stockage différent. Vous pouvez rendre votre modèle plus réutilisable en ajoutant un paramètre pour la référence SKU du compte de stockage.

Dans cette unité, vous allez découvrir plus d’informations sur les sections parameters et outputs du modèle.

Paramètres d’un modèle ARM

Les paramètres d’un modèle ARM vous permettent de personnaliser le déploiement grâce à des valeurs qui sont adaptées à un environnement particulier. Par exemple, vous passez des valeurs différentes selon que vous effectuez un déploiement dans un environnement de développement, de test, de production ou d’autres environnements. Par exemple, le modèle précédent utilise la référence SKU de compte de stockage Standard_LRS. Vous pouvez réutiliser ce modèle pour d’autres déploiements qui créent un compte de stockage en faisant du nom de la référence SKU du compte de stockage un paramètre. Ensuite, vous passez le nom de la référence SKU que vous voulez pour ce déploiement particulier quand le modèle est déployé. Vous pouvez effectuer cette étape à partir de la ligne de commande ou d’un fichier de paramètres.

Dans la section parameters du modèle, vous spécifiez les valeurs que vous pouvez entrer quand vous déployez les ressources. Vous êtes limité à 256 paramètres dans un modèle. Les définitions de paramètre peuvent utiliser la plupart des fonctions de modèle.

Les propriétés disponibles pour un paramètre sont les suivantes :

"parameters": {
  "<parameter-name>": {
    "type": "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [
      "<array-of-allowed-values>"
    ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array-parameters>,
    "metadata": {
      "description": "<description-of-the-parameter>"
    }
  }
}

Les types de paramètres autorisés sont les suivants :

  • chaîne
  • secureString
  • entiers
  • booléen
  • objet
  • secureObject
  • tableau

Suggestions d’utilisation des paramètres

Utilisez des paramètres qui varient en fonction de l’environnement, par exemple, la référence SKU, la taille ou la capacité. Utilisez aussi des paramètres pour les noms de ressources que vous voulez spécifier vous-même afin d’en faciliter l’identification ou pour suivre les conventions de nommage internes. Fournissez une description pour chaque paramètre et utilisez des valeurs par défaut chaque fois que c’est possible.

Pour des raisons de sécurité, ne codez jamais rien en dur et ne spécifiez pas de valeurs par défaut pour les noms d’utilisateur et/ou les mots de passe dans les modèles. Utilisez toujours des paramètres pour les noms d’utilisateur et les mots de passe (ou secrets). Utilisez secureString pour tous les mots de passe et secrets. Si vous transmettez des données sensibles dans un objet JSON, utilisez le type secureObject. Les paramètres de modèle avec les types secureString ou secureObject ne peuvent pas être lus ni collectés après le déploiement de la ressource.

Utiliser des paramètres dans un modèle ARM

Dans la section parameters du modèle ARM, spécifiez les paramètres que vous pouvez entrer quand vous déployez les ressources. Vous êtes limité à 256 paramètres dans un modèle.

Voici un exemple de fichier de modèle avec un paramètre pour la référence SKU du compte de stockage définie dans la section parameters du modèle. Vous pouvez fournir une valeur par défaut à utiliser pour le paramètre si aucune valeur n’est spécifiée au moment de l’exécution.

"parameters": {
  "storageAccountType": {
    "type": "string",
    "defaultValue": "Standard_LRS",
    "allowedValues": [
      "Standard_LRS",
      "Standard_GRS",
      "Standard_ZRS",
      "Premium_LRS"
    ],
    "metadata": {
      "description": "Storage Account type"
    }
  }
}

Utilisez ensuite le paramètre dans la définition des ressources. La syntaxe est [parameters('name of the parameter')]. Vous allez utiliser la fonction parameters. Vous en apprendrez davantage sur les fonctions dans le module suivant.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-04-01",
    "name": "learntemplatestorage123",
    "location": "[resourceGroup().location]",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "kind": "StorageV2",
    "properties": {
      "supportsHttpsTrafficOnly": true
    }
  }
]

Quand vous déployez le modèle, vous pouvez fournir une valeur pour le paramètre. Notez la dernière ligne de la commande suivante :

templateFile="azuredeploy.json"
az deployment group create \
  --name testdeployment1 \
  --template-file $templateFile \
  --parameters storageAccountType=Standard_LRS

Sorties d’un modèle ARM

Dans la section outputs de votre modèle ARM, vous pouvez spécifier des valeurs qui seront retournées après un déploiement réussi. Voici les éléments qui composent la section Sorties.

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Élément Description
output-name Doit être un identificateur JavaScript valide.
condition (Facultatif) Une valeur booléenne qui indique si cette valeur de sortie est retournée. Si la valeur est true, elle est incluse dans la sortie du déploiement. Si elle est false, la valeur de sortie est ignorée pour ce déploiement. En l'absence de spécification, la valeur par défaut est true.
type Le type de la valeur de sortie.
value (Facultatif) Une expression de langage de gabarit évaluée et retournée sous forme de valeur de sortie.
copy (Facultatif) La copie est utilisée pour retourner plusieurs valeurs pour une sortie.

Utiliser des sorties dans un modèle ARM

Voici un exemple pour produire en sortie les points de terminaison du compte de stockage :

"outputs": {
  "storageEndpoint": {
    "type": "object",
    "value": "[reference('learntemplatestorage123').primaryEndpoints]"
  }
}

Notez la partie reference de l’expression. Cette fonction obtient l’état d’exécution du compte de stockage.

Redéployer un modèle ARM

Rappelez-vous que les modèles ARM sont idempotents, ce qui signifie que vous pouvez redéployer le modèle dans le même environnement et que, si rien n’a été modifié dans le modèle, rien ne changera dans l’environnement. Si une modification a été apportée au modèle, par exemple si vous avez modifié une valeur de paramètre, seule cette modification sera déployée. Votre modèle peut contenir toutes les ressources dont vous avez besoin pour votre solution Azure et vous pouvez réexécuter sans danger un modèle. Les ressources sont créées seulement si elles n’existent pas déjà et mises à jour seulement s’il y a une modification.