Gran pregunta y este podría ser un escenario probable cada vez que necesite actualizar una pila de CF. Lo que creo que realmente está diciendo es que tiene una actualización de la base de datos que necesita operar fuera de banda (o posiblemente antes de la actualización de la aplicación) y realmente no se puede ejecutar al inicio de la aplicación, ya que se ejecutaría en todos los Servidores EC2 simultáneamente.
No mencionó el tipo de script o base de datos, por lo que, hablando en general, aquí hay algunas opciones:
- Adjunte una única instancia EC2 (que no forme parte de ningún ASG) a su plantilla CF que inicie su secuencia de comandos y termine en el apagado.
- Ejecutar como una función lambda (iniciada por su plantilla CF)
- Inclúyalo como parte del inicio de la aplicación, utilizando la base de datos como un bloqueo temporal. En otras palabras:
- verifique si alguien ha bloqueado la base de datos para actualizaciones (o si incluso existe una tabla).
- si no, bloquéelo y continúe con las actualizaciones.
- si es así, espere a que se libere el bloqueo y luego omita hacer la actualización usted mismo (ya que alguien ya lo ha hecho).
- considere combinar con un indicador de versión de esquema de base de datos. Dado que las bases de datos tienden a ser ACID, son el lugar perfecto para almacenar este bloqueo.
- Inclúyalo como parte del inicio de la aplicación, pero use un mecanismo de bloqueo (podría ser algo tan simple como un archivo escrito en algún lugar que no esté sujeto a la consistencia eventual … ¡lo que deja fuera S3!)
- Coloque un mensaje de trabajo de actualización (tal vez con detalles o la secuencia de comandos de actualización en un archivo S3) en una cola como SQS y haga que los servidores de aplicaciones verifiquen y retiren el trabajo (único) al inicio si existe. (Por supuesto, esto podría permitirles continuar usando la base de datos a medida que se actualiza, lo que puede ser ideal o no).
(Nota: algunos de estos escenarios pueden introducir un SPOF o un punto muerto en el inicio, pero esto puede ser preferencial a una base de datos inconsistente o antigua).
- ¿Cómo abordan las soluciones basadas en la nube las preocupaciones de los clientes sobre la sensibilidad de los datos?
- ¿Qué implica el futuro de la computación en la nube para las startups que necesitan manejar gran cantidad de datos?
- ¿Cuál es la solución de almacenamiento en la nube más segura sobre la que solo usted tiene control completo?
- ¿Cuáles son las mejores prácticas que se siguen para respaldar datos localmente y en la nube?
- ¿Cuáles son los pros y los contras de usar un Team Foundation Server alojado?
También puede haber mejores lugares para hacer esto fuera de CloudFormation. También debe buscar en otros lugares para colocar esto en su flujo de trabajo, como ser activado por git commits, servidores CI como Jenkins, etc.
* plug: consulte Userify, SSH key Manager diseñado para EC2: https://userify.com