Come posso aggiornare il mio volume EBS in CloudFormation anche se non sostituisco le mie istanze EC2?

3 minuti di lettura
0

Desidero aggiornare il mio volume Amazon Elastic Block Store (Amazon EBS) in AWS CloudFormation. Tuttavia, non voglio sostituire le mie istanze Amazon Elastic Compute Cloud (Amazon EC2).

Risoluzione

Per evitare la sostituzione di un'istanza, è consigliabile utilizzare il tipo di risorsa AWS::EC2::Volume quando si aggiornano i volumi EBS in CloudFormation.

La sostituzione dell'istanza avviene quando si specificano i volumi nella proprietà BlockDeviceMappings dei tipi di risorsa AAWS::EC2::Instance e AWS::EC2::Template. In questo scenario, devi aggiungere un attributo retain DeletionPolicy.

Importante: se modifichi manualmente il volume, ad esempio da gp2 a gp3, devi modificare anche il volume collegato all'istanza. Verifica che l'istanza non sia nello stato Ottimizzazione o Modifica. Prima di modificare il volume in gp3, assicurati di rispettare i requisiti di modifica del volume.

Per evitare la sostituzione dell'istanza quando modifichi i volumi specificati con la proprietà BlockDeviceMappings, effettua le seguenti operazioni.

Aggiungi un attributo retain DeletionPolicy alla risorsa modello AWS::EC2::Instance di destinazione

Completa i seguenti passaggi:

  1. Esegui uno snapshot dei volumi per creare un backup dei carichi di lavoro critici.

  2. Imposta DeletionPolicy su Retain nello stack CloudFormation dell'istanza con il volume che desideri aggiornare. Esempio:

    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. Aggiorna lo stack.

Rimuovi la risorsa dal suo stack CloudFormation e implementa le modifiche

Completa i seguenti passaggi:

  1. Rimuovi l'istanza dal modello per rimuoverla dallo stack CloudFormation, ma non eliminare la risorsa sottostante. Quindi modifica manualmente l'istanza EC2.
    Nota: se nel modello è presente una sola risorsa, è necessario creare una risorsa sostitutiva, ad esempio un'altra istanza. Puoi eliminare la risorsa dal modello dopo aver importato nuovamente nel modello l'istanza EC2.
  2. Modifica gli attributi del volume EBS.

Importa nuovamente la risorsa nello stack CloudFormation

Completa i seguenti passaggi:

  1. Apri la console CloudFormation.

  2. Nel pannello di navigazione, scegli Stack.

  3. Scegli Operazioni stack, quindi scegli Importa risorse nello stack.

  4. Inserisci il modello CloudFormation aggiornato. Esempio:

    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

    Nota: per importare una risorsa, il modello CloudFormation deve descrivere la risorsa con le sue configurazioni esistenti.

  5. In Identificatore, inserisci l'ID dell'istanza.

  6. Scegli Import resource (Importa risorsa).

Dopo che CloudFormation ha aggiornato lo stato a IMPORT_COMPLETE, l'istanza fa parte dello stack.

Potresti ricevere il messaggio di errore "There was an error creating this change set. As part of the import operation, you cannot modify or add [Outputs]". Per risolvere il problema, verifica che la sezione Output del modello CloudFormation più recente corrisponda al modello utilizzato dallo stack. Se non sono uguali, aggiorna il modello CloudFormation più recente in modo che corrisponda ai valori nella sezione Output del modello utilizzato dallo stack. Quindi aggiorna nuovamente lo stack.

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa