Prédire ce qu’un déploiement va faire avec what-if
Toute personne qui déploie ou modifie des ressources dans un environnement se pose des questions telles que les suivantes :
- Est-ce que je vais endommager quelque chose ?
- Est-ce que je vais supprimer quoi que ce soit ?
- Comment ce déploiement va-t-il affecter les ressources existantes ?
- Puis-je vérifier avant de cliquer sur le bouton Déployer que ce que je pense devoir se produire est réellement ce qui se passera lors du déploiement ?
Déployer et espérer que tout va bien se passer n’est pas une bonne approche. Une meilleure approche consiste à utiliser l’opération what-if. Cette opération vous aide à anticiper les conséquences d’un nouveau déploiement, si vous le tentez.
Azure Resource Manager fournit l’opération what-if pour mettre en évidence les modifications quand vous déployez un modèle. L’opération de simulation n’apporte aucune modification aux ressources existantes. Au lieu de cela, elle prédit les modifications si le modèle spécifié est déployé au niveau d’un groupe de ressources et d’un abonnement.
Notes
L’opération de simulation montre parfois qu’une ressource changera alors qu’en réalité aucune modification n’aura lieu. Nous nous efforçons de réduire ces problèmes, mais nous avons besoin de votre aide. Merci de signaler ces problèmes.
L’utilisation de l’opération de simulation permet de comparer le modèle d’état actuel au modèle d’état souhaité. L’opération what-if vérifie si les modifications apportées par votre modèle correspondent à vos attentes sans appliquer ces modifications aux ressources réelles ou à l’état de ces ressources.
Contrôler le format des résultats de simulation
L’applet de commande Azure PowerShell New-AzResourceGroupDeployment
crée un déploiement sur un groupe de ressources. Lorsque vous ajoutez le paramètre -Whatif
à cette commande, la commande n’effectue pas le déploiement, mais fournit à la place un aperçu de ce qui se produira si vous effectuez ce déploiement.
La commande az deployment group what-if
vous donne un aperçu de ce qui se passera si vous effectuez un déploiement.
Vous pouvez contrôler la quantité de sortie de texte de l’opération de simulation en utilisant l’un des formats de résultats suivants :
FullResourcePayloads
. Si vous incluez ce paramètre, vous obtiendrez une sortie détaillée qui se compose d’une liste de ressources qui changera. La sortie affiche également des détails sur toutes les propriétés qui seront modifiées conformément au modèle.ResourceIdOnly
. Ce mode retourne une liste des ressources vont changer, mais pas toutes les informations détaillées.
Par exemple, considérons que vous changez le type de stockage dans un modèle qui déploie un seul compte de stockage dans un environnement existant.
Vous pouvez exécuter le code PowerShell suivant et demander à Resource Manager de vous fournir les charges utiles de ressources complètes :
New-AzResourceGroupDeployment `
-ResourceGroupName ToyStorage `
-TemplateFile $templateFileName `
-WhatIf `
-WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
--resource-group ToyStorage \
--template-file $templateFile \
--result-format FullResourcePayloads
La commande précédente génère les résultats suivants :
Resource and property changes are indicated with this symbol:
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage
~ Microsoft.Storage/storageAccounts/bz64gjjpidbuvi [2019-06-01]
~ sku.name: "Standard_LRS" => "Standard_GRS"
Resource changes: 1 to modify.
Vous pouvez ensuite réexécuter la commande, mais demander simplement les ID de ressource :
New-AzResourceGroupDeployment `
-ResourceGroupName ToyStorage `
-TemplateFile $templateFileName `
-WhatIf `
-WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
--resource-group ToyStorage \
--template-file $templateFile \
--result-format ResourceIdOnly
La commande précédente génère les résultats suivants :
Resource and property changes are indicated with this symbol:
! Deploy
The deployment will update the following scope:
Scope: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ToyStorage
! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi
Resource changes: 1 to deploy.
Types de modifications détectés par simulation
Lorsque vous utilisez l’opération what-if, elle répertorie six types de modifications :
Type | Explication | Résultat |
---|---|---|
Créer | la ressource n’existe pas, mais elle est définie dans le modèle. | La ressource est créée. |
DELETE | ce type de modification s’applique uniquement lors de l’utilisation du mode complet pour le déploiement. la ressource existe, mais elle n’est pas définie dans le modèle. | Si vous procédez au déploiement en utilisant le mode incrémentiel, la ressource n’est pas supprimée. Si vous procédez au déploiement en utilisant le mode complet, la ressource est supprimée. Ce type de modification est retourné uniquement pour les ressources qui prennent en charge la suppression via le mode complet. |
Ignorer | la ressource existe, mais elle n’est pas définie dans le modèle. | Quand vous utilisez le mode incrémentiel, qui est le mode de déploiement par défaut, la ressource n’est pas déployée ou modifiée. Si vous procédez au déploiement en utilisant le mode complet, la ressource est supprimée. |
NoChange | la ressource existe et est définie dans le modèle. | La ressource est redéployée, mais ses propriétés ne changent pas. Ce type de modification est retourné lorsque le format de résultat est défini sur FullResourcePayloads , qui est le format de résultat par défaut. |
Modifier | la ressource existe et est définie dans le modèle. | La ressource est redéployée et ses propriétés changent. Ce type de modification est retourné lorsque le format de résultat est défini sur FullResourcePayloads , qui est le format de résultat par défaut. |
Déployer | la ressource existe et est définie dans le modèle. | La ressource est redéployée. Il est possible que les propriétés de la ressource changent. L’opération retourne ce type de modification quand elle ne dispose pas de suffisamment d’informations pour déterminer si des propriétés changeront. Cette condition s’affiche uniquement lorsque le format de résultat est défini sur ResourceIdOnly . |
Si vous n’avez pas besoin de connaître tous les types de modifications, vous pouvez utiliser l’argument -WhatIfExcludeChangeType
pour omettre les types qui ne vous intéressent pas.
Si vous n’avez pas besoin de connaître tous les types de modifications, vous pouvez utiliser l’argument --what-if-exclude-change-types
pour omettre les types qui ne vous intéressent pas.
Utiliser les résultats de simulation dans un script
Vous pouvez utiliser la sortie de l’opération de simulation dans un script ou dans le cadre d’un processus de déploiement automatisé.
Vous pouvez obtenir les résultats à l’aide de l’applet de commande Get-AzResourceGroupDeploymentWhatIfResult
. Ensuite, votre script peut analyser les résultats et exécuter toute logique personnalisée dont vous pouvez avoir besoin.
Vous pouvez obtenir les résultats JSON bruts en ajoutant l’argument --no-pretty-print
à la commande CLI. Ensuite, votre script peut analyser les résultats et exécuter toute logique personnalisée dont vous pouvez avoir besoin.
Modes de déploiement et suppression de ressources
Vous souhaitez parfois confirmer la suppression de ressources quand vous déployez le modèle. À cette fin, l’opération de simulation représente le mode de déploiement que vous utilisez. Si vous utilisez le mode de déploiement complet, Resource Manager signale les ressources qu’il va supprimer, car elles ne sont pas définies dans votre déploiement.
Examinons un exemple de modèle qui met à jour une ressource existante et qui est déployé en mode complet :
Voici une explication de ce qui se passe dans cet exemple :
- Le modèle met à jour un compte de stockage nommé
storage-1
, qui est déjà déployé. La référence SKU passe de LRS à GRS et la baliseowner
change de valeur en Team A. La sortie de la simulation affiche un type de modification Modifier pour cette ressource. - Le modèle crée un compte Azure Cosmos DB nommé
cosmos-db-1
, qui n’existe pas encore dans le groupe de ressources. La sortie de simulation affiche un type de modification Créer pour cette ressource. - Le modèle n’inclut pas le serveur logique SQL Azure qui existe déjà dans le groupe de ressources. Étant donné que le déploiement utilise le mode complet, la sortie de simulation affiche un type de modification Supprimer pour cette ressource. Si le déploiement avait utilisé le mode incrémentiel au lieu du mode complet, le type de modification serait Ignorer à la place.
Confirmer vos déploiements
Pour afficher un aperçu des modifications avant de déployer un modèle, utilisez le paramètre -Confirm
avec la commande de déploiement. Si les modifications sont bien celles que vous attendiez, confirmez que vous souhaitez terminer le déploiement.
Conseil
Il est judicieux d’exécuter vos commandes de déploiement avec le commutateur -Confirm
, en particulier si vous effectuez un déploiement en mode complet. Si vous utilisez le commutateur -Confirm
, vous avez la possibilité d’arrêter l’opération si les modifications proposées ne vous conviennent pas.
Pour afficher un aperçu des modifications avant de déployer un modèle, utilisez l’argument --confirm-with-what-if
avec la commande de déploiement. Si les modifications sont bien celles que vous attendiez, confirmez que vous souhaitez terminer le déploiement.
Conseil
Il est judicieux d’exécuter vos commandes de déploiement avec l’argument --confirm-with-what-if
, en particulier si vous effectuez un déploiement en mode complet. Si vous utilisez le commutateur --confirm-with-what-if
, vous avez la possibilité d’arrêter l’opération si les modifications proposées ne vous conviennent pas.