Prédire ce qu’un déploiement va faire avec what-if

Effectué

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 :

Diagram showing change types for three resources, some of which already exist.

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 balise owner 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.