Automatización de Infraestructura con Terraform y AWS

Clase 16 de 21Curso de Introducción a DevOps

Resumen

¿Cómo se configura Terraform para integrar con AWS?

Configurar Terraform para trabajar con AWS es un paso crucial en el proceso de automatización de infraestructura. El primer paso es asegurarnos de que Terraform guarde el archivo tfstate en un bucket de S3 preexistente. Este bucket será el repositorio que almacenará el estado de nuestra infraestructura, por lo que será necesario crearlo en la consola de Amazon si aún no lo hemos hecho.

¿Cómo obtengo permisos y credenciales?

Para que Terraform pueda interactuar con AWS, necesitamos configurar nuestro entorno con las credenciales adecuadas. Debemos crear un usuario de Amazon con permisos de administrador y generar una "access key". Existen varias formas de almacenar estas credenciales de manera segura:

  • Archivo de configuración: Utilizar archivos de configuración dentro de un directorio AWS para guardar el access key y el secret key.
  • CLI de Amazon: Trabajar directamente con el CLI (Command Line Interface) de Amazon para manejar credenciales.

Debemos evitar almacenar las credenciales directamente como parámetros dentro del archivo de configuración de Terraform debido a problemas de seguridad potenciales. Si lo hacemos por motivos de prueba, debemos recordar siempre eliminar esos datos sensibles posteriormente.

¿Qué contienen los archivos Terraform usados?

Los archivos de Terraform son fundamentales para definir la infraestructura que se va a crear y gestionar. Cada archivo corresponde a un componente o conjunto de componentes dentro de nuestra arquitectura en la nube.

¿Cómo se configura CodeCommit y CodeBuild?

La configuración de CodeCommit y CodeBuild se realiza a través de sus respectivos archivos:

  • CodeCommit: Este archivo sencillo provoca la creación de un repositorio llamado repositorio de CICD usando CodeCommit.
  • CodeBuild: Define los roles y permisos necesarios. Es crucial especificar:
    • Quién asume el rol (en este caso, CodeBuild).
    • Las acciones y permisos específicos que se otorgarán.

¿Cómo se obtiene e integra una imagen de Docker?

Cuando una integración precisa utilizar una imagen de Docker, como es el caso del uso de una imagen pública desde Docker Hub, necesitamos conectarnos y usar credenciales específicas:

- Credenciales de la cuenta de Docker se integran para facilitar la descarga de imágenes.
- Asegurar que las credenciales están almacenadas en los archivos de configuración adecuados.

¿Qué pasos siguen después de configurar los archivos?

Una vez configurados todos los archivos de Terraform y los servicios necesitan estar alineados para su correcta ejecución. Es importante asegurarse de que las credenciales estén listas y nuestra estructura de buckets de S3 configurada.

¿Cómo se orquesta toda la infraestructura con CodePipeline?

Para orquestar la infraestructura, utilizamos CodePipeline, que actúa como el controlador maestro que une varios pasos de ejecución:

  • Uso de estados: Cada paso o estado se refiere a una acción, como usar CodeCommit para acceder al código de Terraform.
  • Paso de atributos: Los inputs y outputs entre estados aseguran el flujo de datos necesarios.
  • Configuración en S3: Los artefactos generados se almacenan en buckets de S3, según la estructura de CodePipeline.

¿Cómo se ejecutan los comandos de Terraform?

Para ejecutar terraform y aplicar cambios a nuestra infraestructura, se utilizan comandos tales como terraform init, terraform plan y terraform apply:

  • Terraform init: Inicializa los directorios de trabajo y configura el entorno.
  • Terraform validate: Chequea que los archivos de configuración no contienen errores.
  • Terraform apply: Aplica los cambios planeados a infraestructura, puede incluir el flag auto-approve para evitar confirmaciones manuales.

El uso confidencial de los logs generados durante la ejecución nos permite identificar errores y ajustar las configuraciones en caso de problemas.

¿Cómo se sincroniza con Git y despliega la infraestructura?

Para manejar códigos e impulsar cambios con Git:

  1. Clonar repositorios: Utilizar HTTPS para clonar los repositorios de CodeCommit.
  2. Agregar y confirmar cambios: Con comandos git add . y git commit.
  3. Hacer push a la rama deseada: Con git push origin master logra sincronizar el trabajo local con el repositorio remoto.

Una vez que Git actualiza el repositorio, CodePipeline tomará automáticamente los cambios y ejecutará los flujos predefinidos para aplicar la infraestructura en la nube.

Al configurar y ejecutar todas estas herramientas y servicios, aseguramos una integración CI/CD efectiva, que facilita el despliegue automático y confiable de infraestructura.