Come posso aggiornare il mio volume EBS in CloudFormation senza che le istanze EC2 vengano sostituite?

Ultimo aggiornamento: 05/04/2022

Desidero aggiornare il mio volume Amazon Elastic Block Store (Amazon EBS) in AWS CloudFormation senza che le istanze di Amazon Elastic Compute Cloud (Amazon EC2) vengano sostituite.

Breve descrizione

Come best practice, utilizza il tipo di risorsa AWS::EC2::Volume per impedire la sostituzione delle istanze durante l'aggiornamento dei volumi EBS in CloudFormation.

La sostituzione dell'istanza si verifica quando si specificano i volumi nella proprietà BlockDeviceMappings dei tipi di risorse AWS::EC2::Instance e AWS::EC2::Template. In questo caso, è necessario aggiungere un attributo Retain DeletionPolicy.

Prerequisiti: se modifichi il volume da gp2 a gp3, assicurati che il volume allegato all'istanza sia modificato in gp3. Inoltre, assicurati che l'istanza non sia negli stati Optimizing (Ottimizzazione) o Modifying (Modifica). Prima di modificare il volume in gp3, controlla quali sono le limitazioni.

Importante: prima di risolvere il problema, acquisici uno snapshot dei volumi per creare un backup dei carichi di lavoro essenziali.

Risoluzione

1.    Aggiungi Retain DeletionPolicy allo stack CloudFormation per l'istanza di cui desideri aggiornare il volume e successivamente aggiorna lo 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.    Aggiorna nuovamente lo stack CloudFormation rimuovendo l'istanza dal modello. Nota: se nel modello è presente una sola risorsa, è necessario creare una risorsa sostitutiva, ad esempio un'altra istanza. È possibile eliminare la risorsa dal modello dopo aver terminato.

3.    Modifica gli attributi del volume EBS in base alle tue esigenze.

4.    Importa nuovamente l'istanza nello stack CloudFormation.

Per importare nuovamente l'istanza nello stack CloudFormation:

1.    Apri la console di AWS CloudFormation.

2.    Nella pagina dello stack, scegli Stack actions (Azioni sullo stack), quindi scegli Import resources into stack (Importa risorse nello stack).

3.    Aggiorna il modello:

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.    Inserisci il valore dell'ID istanza nel campo Identifier (Identificatore).

5.    Scegli Import resource (Importa risorsa).

Dopo che CloudFormation passa allo stato IMPORT_COMPLETE, le istanze fanno di nuovo parte dello stack.

Nota: è possibile che venga visualizzato l'errore There was an error creating this change set (Si è verificato un errore durante la creazione di questo set di modifiche). Nell'ambito dell'operazione di importazione, non è possibile modificare o aggiungere [Output]. Per risolvere questo problema, verifica che le sezioni Output del modello CloudFormation più recente e del modello utilizzato dallo stack siano uguali. In caso contrario, aggiorna il modello CloudFormation più recente in modo che corrisponda ai valori nella sezione Output del modello utilizzato dal tuo stack. Successivamente, aggiorna di nuovo lo stack.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?