Quero atualizar meu volume do Amazon Elastic Block Store (Amazon EBS) no AWS CloudFormation. No entanto, não quero substituir minhas instâncias do Amazon Elastic Compute Cloud (Amazon EC2).
Resolução
Para evitar a substituição de instâncias, é uma prática recomendada usar o tipo de recurso AWS::EC2::Volume 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 cenário, você deve adicionar um atributo de retenção DeletionPolicy.
Importante: se você modificar manualmente o volume, como de gp2 para gp3, também deverá modificar o volume anexado à instância. Verifique se a instância não está no estado Otimizando ou Modificando. Antes de modificar o volume para gp3, certifique-se de cumprir os requisitos de modificação do volume.
Para evitar a substituição de instâncias ao modificar volumes que você especifica com a propriedade BlockDeviceMappings, conclua as etapas a seguir.
Adicionar um atributo de retenção DeletionPolicy ao recurso de modelo AWS::EC2::Instance de destino
Conclua as etapas a seguir:
-
Capture um snapshot dos volumes para criar um backup dos workloads críticos.
-
Defina DeletionPolicy como Reter na pilha do CloudFormation da instância com o volume que você deseja atualizar. Exemplo:
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
-
Atualize a pilha.
Remover o recurso da pilha do CloudFormation e implementar alterações
Conclua as etapas a seguir:
- Remova a instância do modelo para removê-la da pilha do CloudFormation, mas não exclua o recurso subjacente. Em seguida, modifique manualmente a instância do EC2.
Observação: se você tiver apenas um recurso em seu modelo, deverá criar um recurso substituto, como outra instância. É possível excluir o recurso do modelo depois de importar a instância do EC2 de volta para o modelo.
- Modifique os atributos de volume do EBS.
Importar o recurso de volta para a pilha do CloudFormation
Conclua as etapas a seguir:
-
Abra o console do CloudFormation.
-
No painel de navegação, escolha Pilha.
-
Escolha Ações de pilha e, em seguida, Importar recursos para a pilha.
-
Insira o modelo atualizado do CloudFormation. Exemplo:
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
Observação: para importar um recurso, o modelo do CloudFormation deve descrever o recurso com suas configurações atuais.
-
Em Identificador, insira o ID da instância.
-
Escolha Importar recurso.
Depois que o CloudFormation atualiza o status para IMPORT_COMPLETE, a instância faz parte da pilha.
É possível receber a mensagem de erro “There was an error creating this change set. As part of the import operation, you cannot modify or add [Outputs]”. Para resolver esse problema, verifique se a seção Saídas do modelo mais recente do CloudFormation corresponde ao modelo que sua pilha usa. Se não forem iguais, atualize o modelo mais recente do CloudFormation para corresponder aos valores na seção Saídas do modelo que sua pilha usa. Em seguida, atualize a pilha novamente.