Ich möchte mein Amazon Elastic Block Store (Amazon EBS)-Volume in AWS CloudFormation aktualisieren, ohne dass Amazon Elastic Compute Cloud (Amazon EC2)-Instances ersetzt werden.
Kurzbeschreibung
Als bewährte Methode sollten Sie den Ressourcentyp AWS::EC2::Volume verwenden, um den Austausch von Instances beim Aktualisieren von EBS-Volumes in CloudFormation zu verhindern.
Ein Instance-Ersatz erfolgt, wenn Sie Volumes in der BlockDeviceMappings-Eigenschaft der Ressourcentypen AWS::EC2::Instance und AWS::EC2::Template angeben. In diesem Fall müssen Sie ein „DeletionPolicy beibehalten“-Attribut hinzufügen.
Voraussetzungen: Wenn Sie das Volume von gp2 auf gp3 ändern, stellen Sie sicher, dass das an die Instance angehängte Volume in gp3 geändert wurde. Stellen Sie außerdem sicher, dass sich die Instance nicht im Status Optimieren oder Ändern befindet. Bevor Sie das Volume in GP3 ändern, überprüfen Sie die Einschränkungen.
Wichtig: Bevor Sie das Problem beheben, erstellen Sie einen Snapshot der Volumes, um ein Backup der kritischen Workloads zu erstellen.
Auflösung
1. Fügen Sie die Retain DeletionPolicy zum CloudFormation-Stack für die Instance hinzu, die Sie das Volume aktualisieren möchten und aktualisieren Sie dann den Stack:
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. Aktualisieren Sie den CloudFormation-Stack erneut, indem Sie die Instance aus der Vorlage entfernen. Hinweis: Wenn Ihre Vorlage nur eine Ressource enthält, müssen Sie eine eigenständige Ressource erstellen, z. B. eine weitere Instance. Sie können die Ressource nach Abschluss aus der Vorlage löschen.
3. Passen Sie die EBS-Volume-Attribute an Ihre Anforderungen an.
4. Importieren Sie die Instance wieder in den CloudFormation-Stack.
So importieren Sie die Instance wieder in den CloudFormation-Stack:
1. Öffnen Sie die AWS-CloudFormation-Konsole.
2. Wählen Sie auf der Stackseite Stack actions (Stack-Aktionen) aus und wählen Sie dann Import resources into stack (Ressourcen in den Stack importieren) aus.
3. Aktualisieren Sie die Vorlage:
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. Geben Sie den Instance-ID-Wert in das Feld Kennung ein.
5. Wählen Sie Import resource (Ressource importieren).
Nachdem CloudFormation in den Status IMPORT_COMPLETE wechselt, sind die Instances wieder Teil des Stacks.
Hinweis: Möglicherweise wird der Fehler angezeigt. Beim Erstellen dieses Änderungssatzes ist ein Fehler aufgetreten. Im Rahmen des Importvorgangs können Sie [Outputs] nicht ändern oder hinzufügen. Um dieses Problem zu beheben, stellen Sie sicher, dass die Outputs-Abschnitte der neuesten CloudFormation-Vorlage und die Vorlage, die Ihr Stack verwendet, identisch sind. Wenn dies nicht der Fall ist, aktualisieren Sie die neueste CloudFormation-Vorlage so, dass sie den Werten im Abschnitt Ausgaben der Vorlage entspricht, die Ihr Stack verwendet. Aktualisieren Sie dann den Stackl erneut.