Skip to main content

Ejemplo AWS

El proyecto consiste en crear una imagen de Ubuntu hardened en AWS utilizando scripts y respetando la estructura del proyecto y carpetas. Podríamos hacerlo con Ansible, pero lo dejamos para otro ejemplo más simple.

La documentación sobre cómo utilizar este source está en EBS

El proyecto completo está en la carpeta bastion-ubuntu

Detalles importantes sobre el proyecto

  • Es necesario que la VPC por defecto esté habilitada pues la instancia necesita levantarse en alguna VPC. Si la VPC no está habilitada sería necesario pasar algunos parámetros adicionales como vpc_id, subnet_id (pública), etc. Como AWS no cobra por la VPC por defecto, mantenerla habilitada es más fácil. Si se colocara esto en el proyecto quedaría más difícil el estudio para otros.
  • El source quedó reutilizable pudiendo ser utilizado en muchas situaciones.
  • Los archivos de entrada para las variables están en la carpeta vars.
  • Si quieres colocar una instancia mayor para hacer el build siéntete libre, esta máquina terminará rápidamente no generando costo muy alto mejorando la velocidad en el build. Por ese motivo no veo necesidad de declarar filtros para buscar instancias spot a no ser que tengas imagen construida todos los días, lo que no es el caso.
  • Usar variables de entorno posibilita colocarlo en un pipeline.

¿Qué podría mejorarse?

  • Podrían colocarse más AMIs de entrada
  • En este caso de un bastion, Session Manager podría ser habilitado
  • En el caso de una distribución de imagen, otros factores deben ser considerados como por ejemplo licencia.
  • Definir IAM con roles y políticas correctas para solamente construir la imagen.
  • etc

¿Cómo construir el proyecto?

Con el terminal en la carpeta del proyecto y las variables de AWS exportadas

packer init . --upgrade
packer build --machine-readable -var-file="./vars/ubuntu.auto.pkrvars.hcl" . | tee build.log