Como atualizar meu volume do EBS no CloudFormation sem que as instâncias do EC2 sejam substituídas?

Data da última atualização: 05/04/2022

Quero atualizar meu volume do Amazon Elastic Block Store (Amazon EBS) no AWS CloudFormation sem que as instâncias do Amazon Elastic Compute Cloud (Amazon EC2) sejam substituídas.

Breve descrição

Como prática recomendada, use o tipo de recurso AWS::EC2::Volume para evitar a substituição de instâncias ao atualizar volumes do EBS no CloudFormation.

A substituição da instância ocorre quando você especifica volumes na propriedade BlockDeviceMappings dos tipos de recursos AWS::EC2::Instance e AWS::EC2::Template. Nesse caso, você deve adicionar um atributo Retain DeletionPolicy.

Pré-requisitos: se você modificar o volume de gp2 para gp3, certifique-se de que o volume anexado à instância seja modificado para gp3. Além disso, verifique se a instância não está nos estados Optimizing (Otimizado) ou Modifying (Modificando). Antes de modificar o volume para gp3, verifique quais são as limitações.

Importante: antes de resolver o problema, tire um snapshot dos volumes para criar um backup das workloads críticas.

Resolução

1.    Adicione Retain DeletionPolicy à pilha do CloudFormation para a instância cujo volume você deseja atualizar e, em seguida, atualize a pilha:

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.    Atualize a pilha do CloudFormation novamente removendo a instância do modelo. Observação: se você tiver apenas um recurso no modelo, deverá criar um recurso substituto, como outra instância. Você poderá excluir o recurso do modelo depois de terminar.

3.    Modifique os atributos do volume do EBS de acordo com seus requisitos.

4.    Importe a instância de volta para a pilha do CloudFormation.

Para importar a instância de volta para a pilha do CloudFormation:

1.    Abra o console do AWS CloudFormation.

2.    Na página da pilha, escolha Stack actions (Ações da pilha) e, em seguida, escolha Import resources into stack (Importar recursos para a pilha).

3.    Atualize o modelo:

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.    Insira o valor do ID da instância no campo Identifier (Identificador).

5.    Escolha Import resource (Importar recurso).

Depois que o CloudFormation passa para o status IMPORT_COMPLETE, as instâncias fazem parte da pilha novamente.

Observação: você pode receber o erro, There was an error creating this change set. As part of the import operation, you cannot modify or add [Outputs] (Houve um erro ao criar esse conjunto de alterações. Como parte da operação de importação, você não pode modificar ou adicionar [Saídas]). Para resolver esse problema, verifique se as seções Outputs do modelo mais recente do CloudFormation e o modelo que sua pilha está usando são os mesmos. Se não forem, atualize o modelo mais recente do CloudFormation para corresponder aos valores na seção Outputs do modelo que sua pilha está usando. Em seguida, atualize a pilha novamente.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?