En esta tercera sesión dimos el salto de la infraestructura hacia el empaquetado de nuestra aplicación. Vimos Docker como una forma de empaquetar aplicaciones junto con todas sus dependencias, de manera que puedan ejecutarse de forma consistente sin importar el entorno.
Ejecutamos la aplicación localmente dentro de un contenedor, comprobando que todo lo que necesita para correr viaja dentro de la imagen.
Luego aprendimos a escanear vulnerabilidades en una imagen de Docker utilizando Trivy, lo cual nos permite detectar problemas de seguridad antes de llevar nuestras imágenes a producción.
También vimos cómo reducir el tamaño de la imagen aplicando algunas optimizaciones, terminando con una versión slim de la imagen de Node.js. Una imagen más pequeña significa builds más rápidos, menos superficie de ataque y despliegues más ágiles.
Repasamos los conceptos de lo que un buen contenedor (y su proceso de construcción) debería tener:
- Confianza (trust): saber que la imagen proviene de una fuente confiable y no ha sido alterada.
- Reproducibilidad (reproducibility): que la misma definición produzca siempre el mismo resultado.
- Inmutabilidad (immutability): una vez construida, la imagen no cambia; si algo debe cambiar, se construye una nueva.
- Automatización (automation): que todo el proceso de build y publicación pueda ejecutarse sin pasos manuales.
Finalmente, mostramos cómo crear un repositorio en AWS ECR (Elastic Container Registry) y cómo hacer push de nuestra imagen construida localmente hacia ese registro en AWS.
Partiendo del repositorio que usamos en las sesiones, el ejercicio de esta semana es:
- Actualizar el pipeline de GitHub Actions para agregar el paso de build de la imagen de Docker dentro del pipeline.
- Si es posible, agregar también el paso para hacer push de la imagen a AWS ECR de forma automática desde el pipeline.
La idea es que, aplicando el concepto de automatización que vimos en la sesión, el proceso de construir y publicar la imagen deje de ser manual y ocurra directamente en el pipeline.
Recuerden usar los secrets de GitHub Actions para las credenciales de AWS, nunca las pongan directamente en el código.
Para mostrarnos sus cambios, hagan un fork (copia) del repositorio, suban ahí sus cambios y manden el link al chat para poder darles feedback.
La última versión de la infraestructura terraform se encuetra en este repositorio.
Cualquier duda que tengan antes de la siguiente sesión, pónganla en el chat.