Quiero actualizar mi volumen de Amazon Elastic Block Store (Amazon EBS) en AWS CloudFormation. Sin embargo, no quiero sustituir mis instancias de Amazon Elastic Compute Cloud (Amazon EC2).
Resolución
Para evitar la sustitución de instancias, se recomienda utilizar el tipo de recurso AWS::EC2::Volume al actualizar los volúmenes de EBS en CloudFormation.
La sustitución de instancias se produce cuando se especifican volúmenes en la propiedad BlockDeviceMappings de los tipos de recursos AWS::EC2::Instance y AWS::EC2::Template. En este escenario, debe agregar un atributo retain DeletionPolicy.
Importante: Si modifica el volumen manualmente, por ejemplo, de gp2 a gp3, también debe modificar el volumen que está adjunto a la instancia. Compruebe que la instancia no esté en estado de optimización o modificación. Antes de modificar el volumen a gp3, asegúrese de cumplir los requisitos de modificación del volumen.
Para evitar la sustitución de instancias al modificar los volúmenes que especifique con la propiedad BlockDeviceMappings, siga estos pasos.
Adición de un atributo retain DeletionPolicy al recurso de plantilla AWS::EC2::Instance de objetivo
Siga estos pasos:
-
Realice una instantánea de los volúmenes para crear una copia de seguridad de las cargas de trabajo críticas.
-
Establezca DeletionPolicy en Retain en la pila de CloudFormation de la instancia con el volumen que desea actualizar. Ejemplo:
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
-
Actualice la pila.
Eliminación del recurso de su pila de CloudFormation e implementación de los cambios
Siga estos pasos:
- Elimine la instancia de la plantilla para eliminar la instancia de la pila de CloudFormation, pero no elimine el recurso subyacente. A continuación, modifique manualmente la instancia de EC2.
Nota: Si solo tiene un recurso en la plantilla, debe crear un recurso suplente, como otra instancia. Puede eliminar el recurso de la plantilla después de volver a importar la instancia de EC2 a la plantilla.
- Modifique los atributos del volumen de EBS.
Volver a importar el recurso a la pila de CloudFormation
Siga estos pasos:
-
Abra la consola de CloudFormation.
-
En el panel de navegación, seleccione Pila.
-
Elija Acciones de pila, y, a continuación, elija Importar recursos a la pila.
-
Introduzca la plantilla de CloudFormation actualizada. Ejemplo:
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: Para importar un recurso, la plantilla de CloudFormation debe describir el recurso con sus configuraciones existentes.
-
En Identificador, introduzca el ID de la instancia.
-
Elija Importar recurso.
Después de que CloudFormation actualice el estado a IMPORT_COMPLETE, la instancia pasará a formar parte de la pila.
Es posible que aparezca el mensaje de error «Se ha producido un error al crear este conjunto de cambios. Como parte de la operación de importación, no puede modificar ni agregar [Outputs]». Para resolver este problema, compruebe que la sección Salidas de la plantilla de CloudFormation más reciente coincida con la plantilla que usa su pila. Si no coinciden, actualice la plantilla de CloudFormation más reciente para que coincida con los valores de la sección Salidas de la plantilla que usa su pila. A continuación, actualice la pila de nuevo.