Comment conserver certaines de mes ressources lorsque je supprime une pile AWS CloudFormation ?

Date de la dernière mise à jour : 24/03/2022

Je veux supprimer une pile AWS CloudFormation nouvelle ou existante, mais je ne veux pas supprimer toutes les ressources de la pile. Comment puis-je conserver certaines de ses ressources tout en supprimant la pile ?

Brève description

Pour conserver certaines ressources lorsque vous supprimez une pile, utilisez l'attribut DeletionPolicy dans votre modèle CloudFormation.

Avant de supprimer une pile, assurez-vous de spécifier l'option de politique Retain (Conserver), Snapshot (Instantané) ou Delete (Supprimer) pour chaque ressource que vous souhaitez conserver :

  • L'option Retain (Conserver) permet de conserver la ressource en cas de suppression de la pile.
  • L'option Snapshot (Instantané) permet de créer un instantané de la ressource avant sa suppression.
    Remarque : cette option n'est disponible que pour les ressources qui prennent en charge les instantanés.
  • L'option Delete (Supprimer) supprime la ressource en même temps que la pile.
    Remarque : cette option est le résultat par défaut si vous ne configurez pas de DeletionPolicy.

Résolution

Les étapes suivantes expliquent comment utiliser l'option Retain (Conserver) pour DeletionPolicy afin d'empêcher la suppression de ressources lors de la suppression d'une pile CloudFormation.

Spécifiez les attributs DeletionPolicy dans le modèle AWS CloudFormation.

Dans votre modèle AWS CloudFormation, saisissez Retain (Conserver) comme politique DeletionPolicy pour les ressources que vous souhaitez conserver. Dans les exemples de modèles JSON et YAML suivants, la politique Retain (Conserver) est spécifiée pour les ressources AWS::EC2::SecurityGroup.

JSON :

{
  "Description": "AWS CloudFormation DeletionPolicy demo",
  "Resources": {
    "SGroup1": {
      "Type": "AWS::EC2::SecurityGroup",
      "DeletionPolicy": "Retain",
      "Properties": {
        "GroupDescription": "EC2 Instance access"
      }
    },
    "SGroup2": {
      "Type": "AWS::EC2::SecurityGroup",
      "DeletionPolicy": "Retain",
      "Properties": {
        "GroupDescription": "EC2 Instance access"
      }
    },
    "SGroup1Ingress": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "DeletionPolicy": "Retain",
      "Properties": {
        "GroupName": {
          "Ref": "SGroup1"
        },
        "IpProtocol": "tcp",
        "ToPort": "80",
        "FromPort": "80",
        "CidrIp": "0.0.0.0/0"
      }
    },
    "SGroup2Ingress": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "DeletionPolicy": "Retain",
      "Properties": {
        "GroupName": {
          "Ref": "SGroup2"
        },
        "IpProtocol": "tcp",
        "ToPort": "80",
        "FromPort": "80",
        "CidrIp": "0.0.0.0/0"
      }
    }
  }
}

YAML :

Description: AWS CloudFormation DeletionPolicy demo
Resources:
  SGroup1:
    Type: 'AWS::EC2::SecurityGroup'
    DeletionPolicy: Retain
    Properties:
      GroupDescription: EC2 Instance access
  SGroup2:
    Type: 'AWS::EC2::SecurityGroup'
    DeletionPolicy: Retain
    Properties:
      GroupDescription: EC2 Instance access
  SGroup1Ingress:
    Type: 'AWS::EC2::SecurityGroupIngress'
    DeletionPolicy: Retain
    Properties:
      GroupName: !Ref SGroup1
      IpProtocol: tcp
      ToPort: '80'
      FromPort: '80'
      CidrIp: 0.0.0.0/0
  SGroup2Ingress:
    Type: 'AWS::EC2::SecurityGroupIngress'
    DeletionPolicy: Retain
    Properties:
      GroupName: !Ref SGroup2
      IpProtocol: tcp
      ToPort: '80'
      FromPort: '80'
      CidrIp: 0.0.0.0/0

Charger votre modèle CloudFormation mis à jour

  1. Ouvrez la console AWS CloudFormation.
  2. Pour une nouvelle pile, choisissez Create Stack (Créer une pile). Pour une pile existante, sélectionnez la pile que vous souhaitez mettre à jour, puis choisissez Update Stack (Mettre à jour la pile).
  3. Pour Choose a template (Choisir un modèle), choisissez Upload a template to Amazon S3 (Charger un modèle dans Amazon S3), puis le modèle CloudFormation que vous avez modifié afin d'inclure les politiques de suppression.
  4. Choisissez Next (Suivant).
  5. Si vous créez une nouvelle pile, pour Stack Name (Nom de la pile), saisissez un nom pour votre pile, puis choisissez Next (Suivant).
  6. Sur la page Options, sélectionnez les options appropriées pour votre pile, puis choisissez Next (Suivant).
  7. Choisissez Create (Créer).

Test de l'attribut DeletionPolicy (Politique de suppression)

  1. Supprimez la pile AWS CloudFormation.
  2. Vérifiez que les ressources ayant l'option Retain (Conserver) pour DeletionPolicy sont toujours disponibles après la suppression de la pile. Vous pouvez consulter les ressources de leurs services respectifs à l'aide de la console de gestion AWS ou d'AWS CLI.

Par exemple, vous pouvez vérifier le succès de la politique Retain (Conserver) pour les modèles précédents en suivant les étapes ci-dessous après avoir supprimé la pile CloudFormation.

  1. Ouvrez la console Amazon EC2.
  2. Sur le panneau de navigation, dans la section Network & Security (Réseau et sécurité), choisissez Security Groups (Groupes de sécurité).
  3. Vérifiez que les groupes de sécurité ayant la politique Retain (Conserver) sont toujours disponibles.