Direkt zum Inhalt

Wie aktualisiere ich mein EBS-Volume in CloudFormation, auch wenn ich meine EC2-Instances nicht ersetze?

Lesedauer: 3 Minute
0

Ich möchte mein Amazon Elastic Block Store (Amazon EBS)-Volume in AWS CloudFormation aktualisieren. Ich möchte jedoch meine Amazon Elastic Compute Cloud (Amazon EC2)-Instances nicht ersetzen.

Lösung

Um das Ersetzen von Instances zu verhindern, empfiehlt es sich, den Ressourcentyp AWS::EC2::Volume resource type zu verwenden, wenn du EBS-Volumes in CloudFormation aktualisierst.

Die Instance-Ersetzung erfolgt, wenn du Volumes in der BlockDeviceMappings-Eigenschaft der Ressourcentypen AWS::EC2::Instance und AWS::EC2::Template angibst. In diesem Szenario musst du ein Retain DeletionPolicy-Attribut hinzufügen.

Wichtig: Wenn du das Volume manuell änderst, z. B. von gp2 zu gp3, musst du auch das Volume ändern, das an die Instance angehängt ist. Stelle sicher, dass sich die Instance nicht im Status Optimieren oder Ändern befindet. Bevor du das Volume zu gp3 änderst, stelle sicher, dass du die Anforderungen für die Volume-Änderung erfüllst.

Um zu vermeiden, dass Instances ersetzt werden, wenn du Volumes änderst, die du mit der BlockDeviceMappings-Eigenschaft angibst, führe die folgenden Schritte aus.

Der AWS::EC2::Instance-Vorlagenressource ein Retain DeletionPolicy-Attribut hinzufügen

Führe die folgenden Schritte aus:

  1. Erstelle einen Snapshot der Volumes, um ein Backup kritischer Workloads zu erstellen.

  2. Lege für die DeletionPolicy im CloudFormation-Stack der Instance mit dem Volume, das du aktualisieren möchtest, Beibehaltung fest. Beispiel:

    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
  3. Aktualisiere den Stack.

Ressource aus ihrem CloudFormation-Stack entfernen und Änderungen implementieren

Führe die folgenden Schritte aus:

  1. Entferne die Instance aus der Vorlage, um die Instance aus dem CloudFormation-Stack zu entfernen, aber nicht die zugrunde liegende Ressource zu löschen. Ändere dann die EC2-Instance manuell.
    Hinweis: Wenn deine Vorlage nur eine Ressource enthält, musst du eine eigenständige Ressource erstellen, z. B. eine weitere Instance. Du kannst die Ressource aus der Vorlage löschen, nachdem du die EC2-Instance wieder in die Vorlage importiert hast.
  2. Ändere die EBS-Volume-Attribute.

Ressource wieder in deinen CloudFormation-Stack importieren

Führe die folgenden Schritte aus:

  1. Öffne die CloudFormation-Konsole.

  2. Wähle im Navigationsbereich Stack aus.

  3. Wähle Stack-Aktionen und dann Ressourcen in Stack importieren aus.

  4. Gib die aktualisierte CloudFormation-Vorlage ein. Beispiel:

    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

    Hinweis: Um eine Ressource zu importieren, muss die CloudFormation-Vorlage die Ressource mit ihren vorhandenen Konfigurationen beschreiben.

  5. Gib bei ID die Instance-ID ein.

  6. Wähle Ressource importieren aus.

Nachdem CloudFormation den Status auf IMPORT_COMPLETE aktualisiert hat, ist die Instance Teil des Stacks.

Möglicherweise erhältst du die Fehlermeldung "There was an error creating this change set. As part of the import operation, you cannot modify or add [Outputs]". Um dieses Problem zu beheben, stelle sicher, dass der Abschnitt Ausgänge der neuesten CloudFormation-Vorlage mit der Vorlage übereinstimmt, die dein Stack verwendet. Wenn sie nicht identisch sind, aktualisiere die neueste CloudFormation-Vorlage so, dass sie den Werten im Abschnitt Ausgänge der Vorlage entspricht, die dein Stack verwendet. Aktualisiere dann den Stack erneut.

AWS OFFICIALAktualisiert vor einem Jahr