Comment mettre à jour mon volume EBS dans CloudFormation sans que les instances EC2 soient remplacées ?

Dernière mise à jour : 31/08/2022

Jeveuxmettre à jour mon volume Amazon Elastic Block Store (Amazon EBS) dans AWS CloudFormation sans que les instances Amazon Elastic Compute Cloud (Amazon EC2) soient remplacées.

Brève description

Comme bonne pratique, utilisez le type de ressource AWS::EC2::Volume pour empêcher le remplacement des instances lors de la mise à jour des volumes EBS dans CloudFormation.

Le remplacement d'instance se produit lorsque vous spécifiez des volumes dans la propriété BlockDeviceMappings des types de ressources AWS::EC2::Instance et AWS::EC2::Template. Dans ce cas, vous devez ajouter un attribut Retain DeletionPolicy.

Prérequis : si vous modifiez le volume de gp2 en gp3, assurez-vous que le volume attaché à l'instance est modifié en gp3. Assurez-vous également que l'instance n'est pas dans les états Optimizing (Optimisation) ou Modifying (Modification). Avant de modifier le volume en gp3, vérifiez quelles sont les limitations.

Important : avant de résoudre le problème, prenez un instantané des volumes pour créer une sauvegarde des charges de travail critiques.

Solution

1.    Ajoutez l'attribut Retain DeletionPolicy à la pile CloudFormation pour l'instance dont vous souhaitez mettre à jour le volume, puis mettez à jour la pile :

AWSTemplateFormatVersion: '2010-09-09'
Resources:
 Myinstance:
  Type: AWS::EC2::Instance
  DeletionPolicy: Retain
  Properties:
   BlockDeviceMappings:
    - DeviceName: /dev/xvda
     Ebs:
      VolumeType: gp2
      VolumeSize: 10
      DeleteOnTermination: true
   EbsOptimized: false
   ImageId: ami-064ff912f78e3e561
   InstanceInitiatedShutdownBehavior: stop
   InstanceType: t2.micro
   Monitoring: false

2.    Mettez à nouveau à jour la pile CloudFormation en supprimant l'instance du modèle. Remarque : si vous n'avez qu'une seule ressource dans votre modèle, vous devez créer une ressource de réserve, telle qu'une autre instance. Vous pouvez supprimer la ressource du modèle après avoir terminé.

3.    Modifiez les attributs du volume EBS selon vos besoins.

4.    Réimportez l'instance dans la pile CloudFormation.

Pour réimporter l'instance dans la pile CloudFormation :

1.    Ouvrez la console AWS CloudFormation.

2.    Sur la page de la pile, choisissez Stack actions (Actions de pile), puis choisissez Import resources into stack (Importer des ressources dans la pile).

3.    Mettez à jour le modèle :

AWSTemplateFormatVersion: '2010-09-09'
Resources:
 Myinstance:
  Type: AWS::EC2::Instance
  DeletionPolicy: Retain
  Properties: 
   BlockDeviceMappings:
    - DeviceName: /dev/xvda
      Ebs:
       VolumeType: gp3
       VolumeSize: 100
       DeleteOnTermination: true
    EbsOptimized: false
    ImageId: ami-064ff912f78e3e561
    InstanceInitiatedShutdownBehavior: stop
    InstanceType: t2.micro
    Monitoring: false

4.    Saisissez la valeur de l'ID d'instance dans le champ Identifier (Identifiant).

5.    Choisissez Import resource (Importer une ressource).

Une fois que CloudFormation est passé au statut IMPORT_COMPLETE, les instances font à nouveau partie de la pile.

Remarque : il se peut que vous receviez l'erreur « There was an error creating this change set. As part of the import operation, you cannot modify or add [Outputs] » (Une erreur s'est produite lors de la création de ce jeu de modifications. Dans le cadre de l'opération d'importation, vous ne pouvez pas modifier ou ajouter [Outputs]). Pour résoudre ce problème, vérifiez que les sections Outputs (Sorties) du dernier modèle CloudFormation et du modèle que votre pile utilise sont les mêmes. Si ce n'est pas le cas, mettez à jour le dernier modèle CloudFormation pour faire correspondre les valeurs de la section Outputs (Sorties) avec celles du modèle que votre pile utilise. Ensuite, mettez à jour la pile à nouveau.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?