Piles de déploiement (préversion)

Une pile de déploiement Azure est un type de ressource Azure qui permet la gestion d’un groupe de ressources Azure en tant qu’unité atomique. Lorsqu’un fichier Bicep ou un modèle JSON ARM est soumis à une pile de déploiement, il définit les ressources gérées par la pile. Si une ressource précédemment incluse dans le modèle est supprimée, elle sera détachée ou supprimée en fonction du comportement actionOnUnmanage spécifié de la pile de déploiement. Comme pour d’autres ressources Azure, l’accès à la pile de déploiement peut être restreint à l’aide du contrôle d’accès en fonction du rôle Azure (RBAC Azure).

Pour créer et mettre à jour une pile de déploiement, vous pouvez utiliser Azure CLI, Azure PowerShell ou le Portail Azure avec des fichiers Bicep. Ces fichiers Bicep sont transpilés en modèles ARM JSON, qui sont ensuite déployés en tant qu’objet de déploiement par la pile. La pile de déploiement offre des fonctionnalités supplémentaires au-delà des ressources de déploiement familières, servant de sur-ensemble de ces fonctionnalités.

Microsoft.Resources/deploymentStacks est le type de ressource pour les piles de déploiement. Il se compose d’un modèle principal qui peut effectuer une à plusieurs mises à jour dans les étendues des ressources qu’il décrit et bloquer toute modification indésirable de ces ressources.

Lors de la planification de votre déploiement et de la détermination des groupes de ressources qui doivent faire partie de la même pile, il est important de prendre en compte le cycle de vie de gestion de ces ressources, notamment la création, la mise à jour et la suppression. Par exemple, supposons que vous devez provisionner des machines virtuelles de test pour différentes équipes d’application sur différentes étendues de groupes de ressources. Dans ce cas, une pile de déploiement peut être utilisée pour créer ces environnements de test et mettre à jour les configurations de machine virtuelle de test via des mises à jour ultérieures de la pile de déploiement. Une fois le projet terminé, il peut être nécessaire de supprimer toutes les ressources qui ont été créées, telles que les machines virtuelles de test. En utilisant une pile de déploiement, les ressources managées peuvent être facilement supprimées en spécifiant l’indicateur de suppression approprié. Cette approche rationalisée permet de gagner du temps pendant le nettoyage de l’environnement, car elle implique une mise à jour unique de la ressource de pile au lieu de modifier ou de supprimer individuellement chaque machine virtuelle de test dans différentes étendues de groupes de ressources.

Les piles de déploiement nécessitent Azure PowerShell version 10.1.0 ou ultérieure ou Azure CLI version 2.50.0 ou ultérieure.

Pour créer votre première pile de déploiement, utilisez Démarrage rapide : créer une pile de déploiement.

Pourquoi utiliser les piles de déploiement ?

Les travaux de déploiement offrent les avantages suivants :

  • Simplification de l’approvisionnement et de la gestion des ressources dans différentes étendues en tant qu’entité cohérente.
  • Empêcher les modifications indésirables des ressources managées par le biais des paramètres de refus.
  • Nettoyage efficace de l’environnement en utilisant des indicateurs de suppression lors des mises à jour de la pile de déploiement.
  • Utilisation de modèles standard tels que Bicep, modèles ARM ou spécifications de modèle pour vos piles de déploiement.

Limitations connues

  • Les ressources créées implicitement ne sont pas gérées par la pile. Par conséquent, aucune affectation de refus ou nettoyage n’est possible.
  • Les affectations de refus ne prennent pas en charge les balises.
  • Les affectations de refus ne sont pas prises en charge dans l’étendue du groupe d’administration.
  • Les piles de déploiement ne peuvent pas supprimer les secrets de coffre de clés. Si vous supprimez des secrets de coffre de clés d’un modèle, veillez à exécuter également la commande de mise à jour/suppression de la pile de déploiement en mode détacher.

Problèmes connus

  • La suppression des groupes de ressources contourne actuellement les attributions de refus. Lors de la création d’une pile de déploiement, dans l’étendue du groupe de ressources, le fichier Bicep ne contient pas la définition du groupe de ressources. Malgré le paramètre de l’affectation de refus, il est possible de supprimer le groupe de ressources et la pile qu’il contient. Si un verrou est toutefois actif sur une ressource au sein du groupe, l’opération de suppression échoue.
  • La simulation n’est pas disponible dans la préversion.
  • Une pile délimitée par un groupe d’administration ne peut pas être déployée sur un autre groupe d’administration. Elle peut uniquement être déployée sur le groupe d’administration de la pile elle-même ou sur un abonnement enfant.

Créer des piles de déploiement

Une ressource de pile de déploiement peut être créée dans l’étendue du groupe de ressources, de l’abonnement ou du groupe d’administration. Le modèle passé dans une pile de déploiement définit les ressources à créer ou à mettre à jour dans l’étendue cible spécifiée pour le déploiement du modèle.

  • Une pile au niveau de l’étendue du groupe de ressources peut déployer le modèle transmis à la même étendue de groupe de ressources où la pile de déploiement existe.
  • Une pile au niveau de l’étendue de l’abonnement peut déployer le modèle transmis à une étendue de groupe de ressources (si elle est spécifiée) ou la même étendue d’abonnement où existe la pile de déploiement.
  • Une pile au niveau de l’étendue du groupe d’administration peut déployer le modèle transmis à l’étendue d’abonnement spécifiée.

Il est important de noter que lorsqu’une pile de déploiement existe, il en va de même pour l’affectation de refus créée avec la fonctionnalité de refus des paramètres. Par exemple, en créant une pile de déploiement au niveau de l’étendue de l’abonnement qui déploie le modèle dans l’étendue du groupe de ressources et en mode DenyDeleterefuser les paramètres , vous pouvez facilement provisionner des ressources managées dans le groupe de ressources spécifié et bloquer les tentatives de suppression de ces ressources. En utilisant cette approche, vous améliorez également la sécurité de la pile de déploiement en la séparant au niveau de l’abonnement, par opposition au niveau du groupe de ressources. Cette séparation garantit que les équipes de développement qui travaillent avec les ressources approvisionnées ont uniquement une visibilité et un accès en écriture aux groupes de ressources, tandis que la pile de déploiement reste isolée à un niveau supérieur. Cela réduit le nombre d’utilisateurs qui peuvent modifier une pile de déploiement et apporter des modifications à son affectation de refus. Pour plus d’informations, consultez Protéger les ressources managées contre la suppression.

Les commandes create-stack peuvent également être utilisées pour mettre à jour les piles de déploiement.

Pour créer une pile de déploiement dans l’étendue du groupe de ressources :

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

Pour créer une pile de déploiement dans l’étendue de l’abonnement :

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

Le DeploymentResourceGroupName paramètre spécifie le groupe de ressources utilisé pour stocker les ressources managées. Si le paramètre n’est pas spécifié, les ressources managées sont stockées dans l’étendue de l’abonnement.

Pour créer une pile de déploiement dans l’étendue du groupe de ressources :

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Le deploymentSubscriptionId paramètre spécifie le groupe de ressources utilisé pour stocker les ressources managées. Si le paramètre n’est pas spécifié, les ressources managées sont stockées dans l’étendue de l’abonnement.

Répertorier les piles de déploiement

Pour répertorier les ressources de pile de déploiement dans l’étendue du groupe de ressources :

Get-AzResourceGroupDeploymentStack `
  -ResourceGroupName "<resource-group-name>"

Pour répertorier les ressources de pile de déploiement dans l’étendue de l’abonnement :

Get-AzSubscriptionDeploymentStack

Pour répertorier les ressources de pile de déploiement dans l’étendue du groupe d’administration :

Get-AzManagementGroupDeploymentStack `
  -ManagementGroupId "<management-group-id>"

Mettre à jour des piles de déploiement

Pour mettre à jour une pile de déploiement, ce qui peut impliquer l’ajout ou la suppression d’une ressource managée, vous devez apporter des modifications aux fichiers Bicep sous-jacents. Une fois les modifications effectuées, vous disposez de deux options pour mettre à jour la pile de déploiement : exécuter la commande update ou réexécuter la commande create.

La liste des ressources managées peut être entièrement contrôlée via le modèle de conception d’infrastructure en tant que code (IaC).

Utiliser la commande Set

Pour mettre à jour une pile de déploiement dans l’étendue du groupe de ressources :

Set-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none"

Pour mettre à jour une pile de déploiement dans l’étendue de l’abonnement :

Set-AzSubscriptionDeploymentStack `
   -Name "<deployment-stack-name>" `
   -Location "<location>" `
   -TemplateFile "<bicep-file-name>" `
   -DeploymentResourceGroupName "<resource-group-name>" `
  -DenySettingsMode "none"

Le DeploymentResourceGroupName paramètre spécifie le groupe de ressources utilisé pour stocker les ressources de la pile de déploiement. Si vous ne spécifiez pas de nom de groupe de ressources, le service de pile de déploiement crée un nouveau groupe de ressources pour vous.

Pour mettre à jour une pile de déploiement dans l’étendue du groupe d’administration :

Set-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DeploymentSubscriptionId "<subscription-id>" `
  -DenySettingsMode "none"

Utiliser la nouvelle commande

Vous recevez un avertissement semblable à ce qui suit :

The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)

Pour plus d’informations, voir Créer les piles de déploiement.

Détachement et suppression de contrôle

Une ressource détachée (ou une ressource non managée) fait référence à une ressource qui n’est pas suivie ou gérée par la pile de déploiement, mais qui existe toujours dans Azure.

Pour demander à Azure de supprimer des ressources non managées, mettez à jour la pile avec la commande create stack avec l’un des indicateurs de suppression suivants. Pour plus d’informations, consultez Créer une pile de déploiement.

  • DeleteAll: utilisez supprimer plutôt que détacher pour les ressources managées et les groupes de ressources.
  • DeleteResources: utilisez supprimer plutôt que détacher pour uniquement les ressources managées.
  • DeleteResourceGroups: utilisez supprimer plutôt que détacher pour uniquement les groupes de ressources managées. Il n’est pas valide pour être utilisé DeleteResourceGroups seul. DeleteResourceGroups : Doit être utilisé avec DeleteResources.

Par exemple :

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "none" `
  -DeleteResourceGroups `
  -DeleteResources

Avertissement

Lors de la suppression de groupes de ressources avec les propriétés DeleteAll ou DeleteResourceGroups, les groupes de ressources managés et toutes les ressources qu’ils contiennent sont également supprimés.

Supprimer des piles de déploiement

Si vous exécutez les commandes de suppression sans les indicateurs de suppression, les ressources non managées sont détachées, mais pas supprimées. Pour supprimer les ressources non managées, utilisez les commutateurs suivants :

  • DeleteAll: supprimez les ressources et les groupes de ressources.
  • DeleteResources : supprimez les ressources uniquement.
  • DeleteResourceGroups : supprimez les groupes de ressources uniquement.

Même si vous spécifiez le commutateur Supprimer tout, s’il existe des ressources non managées dans le groupe de ressources où se trouve la pile de déploiement, la ressource non managée et le groupe de ressources lui-même ne seront pas supprimés.

Pour supprimer les ressources de pile de déploiement dans l’étendue du groupe de ressources :

Remove-AzResourceGroupDeploymentStack `
  -name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Pour supprimer les ressources de pile de déploiement dans l’étendue de l’abonnement :

Remove-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Pour supprimer les ressources de pile de déploiement dans l’étendue du groupe d’administration :

Remove-AzManagementGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ManagementGroupId "<management-group-id>" `
  [-DeleteAll/-DeleteResourceGroups/-DeleteResources]

Afficher les ressources managées dans la pile de déploiement

Pendant la préversion publique, le service de pile de déploiement n’a pas encore d’interface utilisateur graphique (GUI) Portail Azure. Pour afficher les ressources managées à l’intérieur d’une pile de déploiement, utilisez les commandes Azure PowerShell/Azure CLI suivantes :

Pour afficher les ressources managées dans l’étendue du groupe de ressources :

(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources

Pour afficher les ressources managées dans l’étendue de l’abonnement :

(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources

Pour afficher les ressources managées dans l’étendue du groupe d’administration :

(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources

Ajouter des ressources à la pile de déploiement

Pour ajouter une ressource managée, ajoutez la définition de ressource aux fichiers Bicep sous-jacents, puis exécutez la commande update ou réexécutez la commande create. Pour plus d’informations, consultez Mise à jour des piles de déploiement.

Supprimer des ressources managées de la pile de déploiement

Pour supprimer une ressource managée, supprimez la définition de ressource aux fichiers Bicep sous-jacents, puis exécutez la commande update ou réexécutez la commande create. Pour plus d’informations, consultez Mise à jour des piles de déploiement.

Protéger les ressources managées contre la suppression

Lors de la création d’une pile de déploiement, il est possible d’attribuer un type d’autorisations spécifique aux ressources managées, ce qui empêche leur suppression par des principaux de sécurité non autorisés. Ces paramètres sont appelés paramètres de refus. Vous souhaitez stocker la pile dans une étendue parente.

Azure PowerShell inclut les paramètres suivants pour personnaliser l’affectation de refus :

  • DenySettingsMode: définit les opérations interdites sur les ressources managées pour vous protéger contre les principaux de sécurité non autorisés qui tentent de les supprimer ou de les mettre à jour. Cette restriction s’applique à tout le monde, sauf si l’accès est explicitement accordé. Ces valeurs incluent None, DenyDelete et DenyWriteAndDelete.
  • DenySettingsApplyToChildScopes: les paramètres de refus sont appliqués aux ressources imbriquées sous les ressources managées.
  • DenySettingsExcludedAction: liste des opérations de gestion basées sur les rôles qui sont exclues des paramètres de refus. Jusqu’à 200 actions sont autorisées.
  • DenySettingsExcludedPrincipal : liste des ID de principal Microsoft Entra exclus du verrou. Jusqu’à cinq principaux sont autorisés.

Pour appliquer des paramètres de refus à l’étendue du groupe de ressources :

New-AzResourceGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -ResourceGroupName "<resource-group-name>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Pour appliquer des paramètres de refus à l’étendue de l’abonnement :

New-AzSubscriptionDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Utilisez le DeploymentResourceGroupName paramètre pour spécifier le nom du groupe de ressources au niveau duquel la pile de déploiement est créée. Si aucune étendue n’est spécifiée, elle utilise l’étendue de la pile de déploiement.

Pour appliquer des paramètres de refus à l’étendue du groupe d’administration :

New-AzManagmentGroupDeploymentStack `
  -Name "<deployment-stack-name>" `
  -Location "<location>" `
  -TemplateFile "<bicep-file-name>" `
  -DenySettingsMode "DenyDelete" `
  -DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
  -DenySettingsExcludedPrincipal "<object-id>,<object-id>"

Utilisez le DeploymentSubscriptionId paramètre pour spécifier l’ID d’abonnement au niveau duquel la pile de déploiement est créée. Si aucune étendue n’est spécifiée, elle utilise l’étendue de la pile de déploiement.

Détacher des ressources managées de la pile de déploiement

Par défaut, les piles de déploiement détachent et ne suppriment pas les ressources non managées lorsqu’elles ne sont plus contenues dans l’étendue de gestion de la pile. Pour plus d’informations, consultez Mise à jour des piles de déploiement.

Exporter des modèles à partir de piles de déploiement

Vous pouvez exporter les ressources d’une pile de déploiement vers une sortie JSON. Vous pouvez diriger la sortie vers un fichier.

Pour exporter une pile de déploiement dans l’étendue du groupe de ressources :

Save-AzResourceGroupDeploymentStack `
   -Name '<deployment-stack-name>' `
   -ResourceGroupName '<resource-group-name>' `

Pour exporter une pile de déploiement dans l’étendue de l’abonnement :

Save-AzSubscriptionDeploymentStack `
  -name '<deployment-stack-name>'

Pour exporter une pile de déploiement dans l’étendue du groupe d’administration :

Save-AzManagmentGroupDeploymentStack `
  -Name '<deployment-stack-name>' `
  -ManagementGroupId '<management-group-id>'

Étapes suivantes

Pour effectuer un démarrage rapide, consultez Démarrage rapide : créer une pile de déploiement.