Red de conocimiento informático - Computadora portátil - Travesuras de AWS Cloudformation: implementación de API Gateway

Travesuras de AWS Cloudformation: implementación de API Gateway

Hace unos días agregué algunas configuraciones de recursos nuevas a API Gateway Cloudformation de nuestro proyecto y luego actualicé Cloudformation Stack con esa Cloudformation. Lo ejecuté y me fui a casa.

Como tenía algo que hacer a la mañana siguiente, llegué a la empresa al mediodía. Tan pronto como llegué, un colega me dijo que mi actualización de API Gateway de ayer hizo que algunas de nuestras rutas API fueran inaccesibles. Estaba confundido. Acabo de agregar algunos recursos nuevos, entonces, ¿cómo podría ser inaccesible la ruta API de API Gateway? No le hice ningún cambio.

En ese momento mis compañeros me dijeron que habían solucionado el problema. No pude evitar sentir una punzada de vergüenza por haber solucionado el problema y todavía estaba confundido sobre lo que había sucedido. Les pregunté a mis colegas qué sucedió y cómo lo resolvieron, y me dijeron que después de modificar la información de la nube de API Gateway y actualizarla, algunos recursos en la etapa de API Gateway desaparecieron de manera extraña, pero si se implementaron manualmente en la consola web de AWS, todos los recursos. Será normal.

¿Y entonces qué? En este punto, hay varias preguntas:

Después del análisis, descubrimos que después de actualizar la pila de Cloudformation a través de API Gateway Cloudformation, los recursos en el escenario se convirtieron en los recursos creados cuando ejecutó Cloudformation por primera vez y durante la implementación. Los recursos se convierten en recursos en el escenario que creaste. Cuando se ejecuta Cloudformation por primera vez, los recursos de la etapa se convierten en los recursos que se crearon la primera vez que se ejecutó Cloudformation. En este punto, es posible que se haya dado cuenta de que una vez creada, la misma implementación creada con Cloudformation nunca podrá actualizarse.

Después de encontrar la causa del problema, retrocedamos un poco para descubrir por qué ocurrió el problema:

¿Debo continuar haciendo esto? Por supuesto que no, no tiene sentido hacerlo y la tragedia seguramente volverá a ocurrir. Otro inconveniente de esto es que cuando se actualiza API Gateway, la ruta de API será inaccesible, lo que por supuesto depende de qué tan rápido se implemente manualmente.

Lo que realmente quiero es utilizar Cloudformation para automatizar implementaciones por etapas.

Primero echemos un vistazo a la plantilla API Gateway Cloudformation que estamos usando:

Dado que el mismo AWS::ApiGateway::Deployment no se puede actualizar, ¿puedo cambiarlo? ¿Qué pasa con el uso de un nuevo AWS::ApiGateway::Deployment?

Así que cambié el nombre del recurso de implementación a Deployment201905092310 y después de ejecutar la actualización encontré el siguiente error: No se puede especificar StageDescription cuando la etapa a la que hace referencia StageName ya existe.

Bueno, este enfoque vincula el escenario con la implementación y solo quiero crear una nueva implementación, pero no quiero crear un nuevo escenario al mismo tiempo, así que estoy buscando una manera de separarlo. Configuración de etapa, y uno de los tipos de recursos de API Gateway es AWS::ApiGateway::Stage.

Después de algunas modificaciones, nuestra plantilla API Gateway Cloudformation se ve así:

Donde __VERSION__ debe reemplazarse con un valor que no se repetirá cada vez que se modifique la plantilla. Puedes usar un comando de Linux como este para un reemplazo rápido:

Por otro lado, si estás usando ansible para implementar la implementación de formación en la nube, entonces puedes hacer esto:

Referencia: /2018/ 12/mastering-cloudformation-for-api.html

Referencia: /2018/12/mastering-cloudformation-for-api.html