¿Es posible forzar la recreación de una instancia EC2 o RDS utilizando pilas de formación en la nube?
Mi pila se atasca en un punto donde simplemente destruir y crear el recurso lo arreglará, en lugar de eso tuve que eliminar toda la pila para continuar trabajando.
editar:
Este problema me golpeó dos veces. Primero creé una instancia de AWS :: RDS :: con algunos valores predeterminados y luego intenté degradarla a "EngineVersion": "5.5". Se supone que cambiar esto ocurre con alguna interrupción, pero las instancias mysql no se pueden degradar de 5.6 a 5.5, por lo que la pila se dejó en estado UPDATE_FAILED y no puedo volver a crear RDS sin un truco desagradable.
La otra ocurrencia fue que tengo varios "AWS :: EC2 :: Instance" que descargan y ejecutan un script desde sus "UserData", obviamente, si Y cambia el script descargado, debo recrear la instancia, y no hay forma de hacerlo. Una vez más uso el mismo truco desagradable para recrear la máquina.
El truco desagradable:
En lugar de usar un grupo de escalado automático de una máquina, resolví ambos problemas cambiando la zona de disponibilidad en las propiedades ... pero me dejó con mal gusto
cfn-hup
: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…Respuestas:
Para las instancias de EC2 respaldadas por la tienda, un truco es agregar un comentario al script de datos del usuario que contenga un número de versión, fecha o similar, y luego cambiarlo cada vez que desee recrear la instancia:
Cualquier cambio en
UserData
hará que la instancia sea reemplazada (es decir, regenerada). Sin embargo, el comportamiento del script de datos del usuario debe ser el mismo, ya que la única modificación es un comentario. Tenga en cuenta que esto no funciona para instancias respaldadas por EBS.Para RDS, puede tomar una instantánea de la base de datos de la instancia actual de RDS y luego modificar su plantilla para usar esa instantánea con
DBSnapshotIdentifier
:Cada vez que
DBSnapshotIdentifier
se cambie, la instancia de la base de datos será reemplazada. El uso de instantáneas también le permitirá conservar los datos de cuando se realizó la instantánea. (Si desea borrar los datos, puede crear una instantánea vacía y pasarla como entrada. O eliminar y volver a crear toda la pila de CloudFormation).Un enfoque más genérico es cambiar el nombre lógico del recurso. Desde Modificar una plantilla de pila en los documentos de CloudFormation:
fuente
Si lo coloca en un AutoScalingGroup, puede editar el AutoScalingGroup min / max / default a 0, luego, tan pronto como comience a destruir la instancia anterior, puede poner el min / max / default a 1/1/1 y presto: nueva instancia.
fuente
Si su EC2 está en un AutoScalingGroup, puede establecer la
AutoScalingGroupName
propiedad con un número de versión.Cada vez que cambie ese número de versión, CFN: 1. creará un nuevo grupo de autoescalado y activará las instancias deseadas 2. matará las instancias en el antiguo grupo de autoescalado y lo eliminará
Aquí hay un código de mi pila donde uso esta técnica para forzar a un gran número de máquinas EC2 a recrear y extraer automáticamente un nuevo software de S3.
fuente