Exercice - Ajouter une logique conditionnelle à votre modèle ARM
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
.
Dans Visual Studio Code, créez un fichier nommé condition.json dans le même répertoire que celui qui contient azuredeploy.json.
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.
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.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
.
Dans Visual Studio Code, créez un fichier nommé condition.json dans le même répertoire que celui qui contient azuredeploy.json.
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.
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.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é.