Partager via


Tutoriel : utiliser la pile de déploiement avec Bicep

Dans ce tutoriel, vous allez découvrir le processus de création et de gestion d’une pile de déploiement. Le tutoriel se concentre sur la création de la pile de déploiement dans l’étendue du groupe de ressources. Toutefois, vous pouvez également créer des piles de déploiement dans l’étendue de l’abonnement. Pour obtenir d’autres informations sur la création de piles de déploiement, consultez Créer des piles de déploiement.

Prérequis

Créer un fichier Bicep

Créez un fichier Bicep dans Visual Studio Code pour créer un compte de stockage et un réseau virtuel. Ce fichier est utilisé pour créer votre pile de déploiement.

param resourceGroupLocation string = resourceGroup().location
param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param vnetName string = 'vnet${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: resourceGroupLocation
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-11-01' = {
  name: vnetName
  location: resourceGroupLocation
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    subnets: [
      {
        name: 'Subnet-1'
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: 'Subnet-2'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }
}

Enregistrez le fichier Bicep sous main.bicep.

Créer une pile de déploiement

Pour créer un groupe de ressources et une pile de déploiement, exécutez les commandes suivantes, en veillant à fournir le chemin du fichier Bicep approprié en fonction de votre emplacement d’exécution.

az group create \
  --name 'demoRg' \
  --location 'centralus'

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --action-on-unmanage 'detachAll' \
  --deny-settings-mode 'none'

Utilisez le commutateur action-on-unmanage pour définir ce qui se passe pour les ressources qui ne sont plus gérées après la mise à jour ou la suppression d’une pile. Pour plus d’informations, consultez Détachement et suppression de contrôle. Le deny-settings-mode commutateur attribue 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. Pour plus d’informations, consultez Protéger les ressources managées contre la suppression.

Répertorier la pile de déploiement et les ressources managées

Pour vérifier le déploiement, vous pouvez répertorier la pile de déploiement et répertorier les ressources managées de la pile de déploiement.

Pour répertorier la pile de déploiement déployée :

az stack group show \
  --resource-group 'demoRg' \
  --name 'demoStack'

La sortie montre deux ressources managées, à savoir un compte de stockage et un réseau virtuel :

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deployments/demoStack-24051714epybc",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT32.5330364S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2024-05-17T14:50:18.382948+00:00",
    "createdBy": "johndoe@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2024-05-17T14:50:18.382948+00:00",
    "lastModifiedBy": "johndoe@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": {},
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

Vous pouvez également vérifier le déploiement en listant les ressources managées dans la pile de déploiement :

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Le résultat ressemble à ce qui suit :

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deployments/demoStack-24051714epybc",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT32.5330364S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2024-05-17T14:50:18.382948+00:00",
    "createdBy": "johndoe@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2024-05-17T14:50:18.382948+00:00",
    "lastModifiedBy": "johndoe@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": {},
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

Mettre à jour la pile de déploiement

Pour mettre à jour une pile de déploiement, apportez les modifications nécessaires au fichier Bicep sous-jacent, puis réexécutez la commande pour créer la pile de déploiement ou utilisez la commande set dans Azure PowerShell.

Dans ce tutoriel, vous effectuerez les activités suivantes :

  • Mettre à jour une propriété d’une ressource managée.
  • Ajoutez une ressource à la pile.
  • Détacher une ressource managée.
  • Attacher une ressource existante à la pile.
  • Supprimer une ressource managée.

Mettre à jour une ressource managée

À la fin de l’étape précédente, vous disposez d’une pile avec deux ressources managées. Vous allez mettre à jour une propriété de la ressource de compte de stockage.

Modifiez le fichier main.bicep pour remplacer le nom de la référence SKU Standard_LRS par Standard_GRS :

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_GRS'
  }
}

Mettez à jour la ressource managée en exécutant la commande suivante :

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --action-on-unmanage 'detachAll' \
  --deny-settings-mode 'none'

Vous pouvez vérifier que la propriété SKU en exécutant la commande suivante :

az resource list --resource-group 'demoRg'

Ajouter une ressource managée

À la fin de l’étape précédente, vous disposez d’une pile avec deux ressources managées. Vous allez ajouter une ressource de compte de stockage supplémentaire à la pile.

Modifiez le fichier main.bicep pour inclure une autre définition de compte de stockage :

resource storageAccount1 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Mettez à jour la pile de déploiement en exécutant la commande suivante :

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --action-on-unmanage 'detachAll' \
  --deny-settings-mode 'none'

Vous pouvez également vérifier le déploiement en listant les ressources managées dans la pile de déploiement :

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Vous verrez le nouveau compte de stockage en plus des deux ressources existantes.

Détacher une ressource managée

À la fin de l’étape précédente, vous disposez d’une pile avec trois ressources managées. Vous allez détacher l’une des ressources managées. Une fois la ressource détachée, elle reste dans le groupe de ressources.

Modifiez le fichier main.bicep pour supprimer la définition de compte de stockage suivante de l’étape précédente :

resource storageAccount1 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Mettez à jour la pile de déploiement en exécutant la commande suivante :

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --action-on-unmanage 'detachAll' \
  --deny-settings-mode 'none'

Vous pouvez également vérifier le déploiement en listant les ressources managées dans la pile de déploiement :

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Vous verrez les deux ressources managées dans la pile. Toutefois, la ressource détachée est toujours répertoriée dans le groupe de ressources. Vous pouvez répertorier les ressources dans le groupe de ressources en exécutant la commande suivante :

az resource list --resource-group 'demoRg'

Attacher une ressource existante à la pile

À la fin de l’étape précédente, vous disposez d’une pile avec deux ressources managées. Il existe une ressource non managée dans le même groupe de ressources que les ressources managées. Vous allez attacher cette ressource non managée à la pile.

Modifiez le fichier main.bicep pour inclure la définition de compte de stockage de la ressource non managée :

resource storageAccount1 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Mettez à jour la pile de déploiement en exécutant la commande suivante :

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --action-on-unmanage 'detachAll' \
  --deny-settings-mode 'none'

Vous pouvez également vérifier le déploiement en listant les ressources managées dans la pile de déploiement :

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Vous verrez trois ressources managées.

Supprimer une ressource managée

À la fin de l’étape précédente, vous disposez d’une pile avec trois ressources managées. Dans l’une des étapes précédentes, vous avez détaché une ressource managée. Parfois, vous souhaiterez peut-être supprimer des ressources au lieu d’en détacher une. Pour supprimer une ressource, utilisez la commande action-on-unmanage switch with the create/set.

Modifiez le fichier main.bicep pour supprimer la définition de compte de stockage suivante :

resource storageAccount1 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Exécutez la commande suivante avec le commutateur --action-on-unmanage 'deleteResources' :

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --action-on-unmanage 'deleteResources' \
  --deny-settings-mode 'none' 

En plus de deleteResources, il existe deux autres valeurs disponibles : deleteAll et detachAll. Pour plus d’informations, consultez Détachement et suppression de contrôle.

Vous pouvez également vérifier le déploiement en listant les ressources managées dans la pile de déploiement :

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

Vous verrez les deux ressources managées dans la pile. La ressource est également supprimée du groupe de ressources. Vous pouvez vérifier que le groupe de ressources en exécutant la commande suivante :

az resource list --resource-group 'demoRg'

Configurer les paramètres de refus

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 nommés en tant que paramètres de refus.

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

  • deny-settings-mode: 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.
  • deny-settings-apply-to-child-scopes: les paramètres de refus sont appliqués aux étendues de gestion Azure enfants.
  • deny-settings-excluded-actions: liste des opérations de gestion du contrôle d’accès en fonction du rôle (RBAC) exclues des paramètres de refus. Jusqu’à 200 actions sont autorisées.
  • deny-settings-excluded-principals : liste des ID de principal Microsoft Entra exclus du verrou. Jusqu’à cinq principaux sont autorisés.

Dans ce tutoriel, vous allez configurer le mode de paramètres de refus. Pour plus d’informations sur les autres paramètres de refus, consultez Protéger les ressources managées contre la suppression.

À la fin de l’étape précédente, vous disposez d’une pile avec deux ressources managées.

Exécutez la commande suivante avec le commutateur de mode de refus défini sur deny-delete :

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --action-on-unmanage 'detachAll' \
  --deny-settings-mode 'denyDelete'

La commande de suppression suivante échoue, car le mode des paramètres de refus est défini sur deny-delete :

az resource delete \
  --resource-group 'demoRg' \
  --name '<storage-account-name>' \
  --resource-type 'Microsoft.Storage/storageAccounts'

Mettez à jour la pile avec le mode de paramètres de refus sur none, afin de pouvoir suivre le reste du tutoriel :

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --action-on-unmanage 'detachAll' \
  --deny-settings-mode 'none'

Exporter le modèle à partir de la pile

En exportant une pile de déploiement, vous pouvez générer un fichier Bicep. Ce fichier Bicep sert de ressource pour le développement futur et les déploiements ultérieurs.

az stack group export \
  --name 'demoStack' \
  --resource-group 'demoRg'

Vous pouvez diriger la sortie vers un fichier.

Suppression de la pile de déploiement

Pour supprimer la pile de déploiement et les ressources managées, exécutez la commande suivante :

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --action-on-unmanage 'deleteAll' 

Pour supprimer la pile de déploiement, mais détachez les ressources managées :

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --action-on-unmanage 'detachAll' 

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

Étapes suivantes