Exercice - Ajouter une logique conditionnelle à votre modèle ARM

Effectué

Dans les exercices précédents, vous avez travaillé avec des machines virtuelles Linux. Ici, vous changez un peu de fusil d’épaule et vous concentrez sur la gestion des comptes de stockage.

Supposons que vous avez trois environnements sur lesquels vous devez déployer : Dev, Staging et Production.

  • L’environnement Dev est le premier endroit où se regroupe tout ce dont votre application a besoin. Cet environnement peut inclure des serveurs web, un équilibreur de charge et une base de données.
  • L’environnement Staging est l’endroit où les tests finaux se produisent avant que de nouvelles fonctionnalités d’application soient publiées pour vos utilisateurs finaux.
  • L’environnement Production est l’endroit où vos utilisateurs finaux accèdent à votre application.

Quand vous passez de Dev à Production, vous avez besoin d’une infrastructure supplémentaire. Par exemple, dans Production, vous avez besoin d’un compte de stockage supplémentaire dont vous n’avez pas besoin dans les environnements précédents.

Ici, vous utilisez une condition pour contrôler le moment auquel un compte de stockage est approvisionné. Cela vous permet de prendre en charge chacun de vos environnements d’infrastructure à partir du même modèle ARM.

Créer le modèle ARM

Ici, vous créez un modèle ARM (Azure Resource Manager) qui définit une ressource de compte de stockage.

Le modèle définit également deux paramètres :

  • environment : le nom de l’environnement actuel.
  • storageAccountName : le nom pour le compte de stockage.

environment peut avoir l’une des trois valeurs suivantes : dev, staging ou production. La condition provisionne le compte de stockage uniquement quand environment est égal à production.

  1. Dans Visual Studio Code, créez un fichier nommé condition.json dans le même répertoire que celui qui contient azuredeploy.json.

  2. Ajoutez ces contenus à condition.json :

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "environment": {
          "type": "string",
          "defaultValue": "dev",
          "allowedValues": [
            "dev",
            "staging",
            "production"
          ],
          "metadata": {
            "description": "a value that represents the current environment"
          }
        },
        "storageAccountName": {
          "type": "string",
          "metadata": {
            "description": "a name for the account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "condition": "[equals(parameters('environment'),'production')]",
          "name": "[parameters('storageAccountName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageAccountName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          }
        }
      ],
      "outputs": {}
    }
    

Ici, vous allez déployer un modèle ARM, avec une construction de condition, en utilisant PowerShell et le module Az.

Approvisionner l’environnement de développement

Ici, vous déployez le modèle ARM dans l’environnement Dev. Pour ce faire, affectez au paramètre de modèle environment la valeur dev.

Dans la mesure où la condition provisionne le compte de stockage uniquement quand environment est égal à production, vous vous attendez à ce que le modèle ne provisionne pas le compte de stockage. En d’autres termes, vous vous attendez à un déploiement qui ne contient aucune ressource.

  1. Créez une variable PowerShell qui contient le nom du compte de stockage.

    $STORAGE_ACCT_NAME="tailwindsa"+ (Get-Random -COUNT 1 -Maximum 9999999 )
    

    Les noms de comptes de stockage doivent être uniques. La partie Get-Random garantit que le nom du compte de stockage se termine par une série aléatoire de nombres.

  2. Pour déployer le modèle dans l’environnement Dev, exécutez la commande New-AzResourceGroupDeployment suivante :

    New-AzResourceGroupDeployment `
      -TemplateFile "./condition.json" `
      -storageAccountName $STORAGE_ACCT_NAME `
      -environment dev
    

Vérifier le déploiement sur Dev

N’oubliez pas que vous vous attendez à ce que le modèle n’ait pas approvisionné le compte de stockage.

Pour vérifier ce fait, exécutez la commande Get-AzStorageAccount pour vérifier si le nom du compte de stockage est déjà utilisé.

Exécutez la commande suivante Get-AzStorageAccount :

Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>

Votre sortie ressemble à ceci :

Get-AzStorageAccount: The Resource 'Microsoft.Storage/storageAccounts/tailwindsa4736629' under resource group '<rgn>name of resource group</rgn>' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix

Cela vous indique que le compte de stockage n’a pas encore été provisionné. Vous vous attendez à cela, car vous n’avez pas encore effectué de déploiement sur l’environnement de Production.

Approvisionner l’environnement de Production

Ici, vous déployez le modèle ARM dans l’environnement de Production, de la même façon que vous l’avez fait pour l’environnement Dev.

Pour rappel, voici à quoi ressemble la condition dans votre modèle :

"condition": "[equals(parameters('environment'),'production')]"

Pour déclencher cette condition, vous affectez au paramètre de modèle environment la valeur production.

Exécutez la commande New-AzResourceGroupDeployment suivante pour déployer le modèle dans l’environnement Production :

New-AzResourceGroupDeployment `
  -TemplateFile "./condition.json" `
  -storageAccountName $STORAGE_ACCT_NAME `
  -environment production

Vérifier le déploiement sur Production

Cette fois, vous vous attendez à ce que le modèle ait approvisionné le compte de stockage.

Pour vérifier ce fait, exécutez à nouveau la commande Get-AzStorageAccount pour vérifier que le nom du compte de stockage est en cours d’utilisation.

Exécutez la commande Get-AzStorageAccount suivante :

Get-AzStorageAccount -Name $STORAGE_ACCT_NAME -ResourceGroupName <rgn>sandbox resource group</rgn>

Cette fois-ci, vous obtenez une autre sortie. Au lieu d’un message d’erreur, elle affiche la sortie de la table qui présente des informations sur votre ressource de compte de stockage :

Votre sortie ressemble à ceci :

Location Name              Type                              Kind
-------- ----              ----                              ----
westus   tailwindsa4736629 Microsoft.Storage/storageAccounts StorageV2

Ces valeurs indiquent que le compte de stockage a été approvisionné comme prévu.

Bien qu’il s’agisse d’un exemple de base, vous voyez comment déployer en fonction d’une condition.

Dans la pratique, vos environnements Dev, Staging et Production peuvent contenir des ressources Azure supplémentaires pour prendre en charge vos besoins en matière de calcul, de mise en réseau et de stockage. Chaque environnement est probablement géré par son propre groupe de ressources afin de pouvoir être approvisionné et traité comme une seule unité.

Créer le modèle ARM

Ici, vous créez un modèle ARM (Azure Resource Manager) qui définit une ressource de compte de stockage.

Le modèle définit également deux paramètres :

  • environment : le nom de l’environnement actuel.
  • storageAccountName : le nom pour le compte de stockage.

environment peut avoir l’une des trois valeurs suivantes : dev, staging ou production. La condition provisionne le compte de stockage uniquement quand environment est égal à production.

  1. Dans Visual Studio Code, créez un fichier nommé condition.json dans le même répertoire que celui qui contient azuredeploy.json.

  2. Ajoutez ces contenus à condition.json :

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "environment": {
          "type": "string",
          "defaultValue": "dev",
          "allowedValues": [
            "dev",
            "staging",
            "production"
          ],
          "metadata": {
            "description": "a value that represents the current environment"
          }
        },
        "storageAccountName": {
          "type": "string",
          "metadata": {
            "description": "a name for the account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "condition": "[equals(parameters('environment'),'production')]",
          "name": "[parameters('storageAccountName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageAccountName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          }
        }
      ],
      "outputs": {}
    }
    

Approvisionner l’environnement de développement

Ici, vous déployez le modèle ARM dans l’environnement Dev. Pour ce faire, affectez au paramètre de modèle environment la valeur dev.

Dans la mesure où la condition provisionne le compte de stockage uniquement quand environment est égal à production, vous vous attendez à ce que le modèle ne provisionne pas le compte de stockage. En d’autres termes, vous vous attendez à un déploiement qui ne contient aucune ressource.

  1. Créez une variable bash qui contient le nom du compte de stockage.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    

    Les noms de comptes de stockage doivent être uniques. La partie $RANDOM garantit que le nom du compte de stockage se termine par une série aléatoire de nombres.

  2. Pour déployer le modèle dans l’environnement Dev, exécutez la commande az deployment group create suivante :

    az deployment group create \
      --template-file condition.json \
      --parameters storageAccountName=$STORAGE_ACCT_NAME environment=dev
    

Vérifier le déploiement sur Dev

N’oubliez pas que vous vous attendez à ce que le modèle n’ait pas approvisionné le compte de stockage.

Pour vérifier ce fait, exécutez la commande az storage account check-name pour vérifier si le nom du compte de stockage est déjà utilisé.

Exécutez la commande az storage account check-name suivante :

az storage account check-name --name $STORAGE_ACCT_NAME

Vous voyez ceci :

{
  "message": null,
  "nameAvailable": true,
  "reason": null
}

La valeur de nameAvailable est true, ce qui signifie que le nom du compte de stockage est toujours disponible et qu’il n’a pas encore été provisionné. Vous vous attendez à cela, car vous n’avez pas encore effectué de déploiement sur l’environnement de Production.

Approvisionner l’environnement de Production

Ici, vous déployez le modèle ARM dans l’environnement de Production, de la même façon que vous l’avez fait pour l’environnement Dev.

Pour rappel, voici à quoi ressemble la condition dans votre modèle :

"condition": "[equals(parameters('environment'),'production')]"

Pour déclencher cette condition, vous affectez au paramètre de modèle environment la valeur production.

Exécutez la commande az deployment group create suivante pour déployer le modèle dans l’environnement Production :

az deployment group create \
  --template-file condition.json \
  --parameters storageAccountName=$STORAGE_ACCT_NAME environment=production

Vérifier le déploiement sur Production

Cette fois, vous vous attendez à ce que le modèle ait approvisionné le compte de stockage.

Pour vérifier ce fait, exécutez à nouveau la commande az storage account check-name pour vérifier que le nom du compte de stockage est en cours d’utilisation.

Exécutez la commande az storage account check-name suivante :

az storage account check-name --name $STORAGE_ACCT_NAME

Votre sortie ressemble à ceci :

{
  "message": "The storage account named tailwindsa32100 is already taken.",
  "nameAvailable": false,
  "reason": "AlreadyExists"
}

Ces valeurs indiquent que le compte de stockage a été approvisionné comme prévu.

Bien qu’il s’agisse d’un exemple de base, vous voyez comment déployer en fonction d’une condition.

Dans la pratique, vos environnements Dev, Staging et Production peuvent contenir des ressources Azure supplémentaires pour prendre en charge vos besoins en matière de calcul, de mise en réseau et de stockage. Chaque environnement est probablement géré par son propre groupe de ressources afin de pouvoir être approvisionné et traité comme une seule unité.