Workflow Terraform-Ansible

Este workflow de GitHub Actions permite automatizar por completo el proceso de despliegue de tu aplicación en la nube, ya sea sobre una instancia EC2 (AWS) o un Droplet (DigitalOcean).

GitHub Actions es una herramienta de integración y entrega continua (CI/CD) integrada en GitHub. Permite definir flujos de trabajo que se ejecutan automáticamente cuando ocurren ciertos eventos en tu repositorio o mediante una ejecución manual.

En este caso, se utiliza para coordinar la ejecución de Terraform y Ansible como parte de un pipeline de despliegue automatizado.

El código se divide en dos trabajos:

  • create-infrastructure: Crea la infraestructura usando Terraform.

  • provision-instance: Configura automáticamente la instancia con Ansible, desplegando la aplicación.

Estructura

Asegúrate de tener la siguiente estructura dentro de tu repositorio:

/.github/
└── workflows/
    └── terraform-ansible.yml

/{directorio_principal_de_despliegue}/
├── docker-compose.yml
├── .env
├── ansible/
│   ├── inventory/
│   ├── playbooks/
│   └── roles/
├── terraform/
│   ├── aws/
│   └── digitalocean/

Instrucciones

chevron-rightDefine tu directorio principal de desplieguehashtag

En la sección deployment_dir del workflow, asegúrate de especificar correctamente el nombre del directorio donde se encuentra tus archivos de despliegue (por ejemplo: deployment/, deploy/, etc.).

chevron-rightDefine el directorio de terraformhashtag

Dentro de la sección de trabajos del workflow jobs, ubica el primer trabajo llamado create-infrastructure. En la sección defaults, encontrarás la propiedad working-directory, que indica la ruta donde se encuentran los archivos de Terraform.

Debes establecer esta ruta según el proveedor que estés utilizando:

Para DigitalOcean, utiliza:

Para AWS, utiliza:

circle-info

Si estás utilizando una ruta personalizada distinta a la de los templates, recuerda actualizar working-directory con la ruta correcta según tu estructura.

chevron-rightDefine las variables para tus secretoshashtag

Como se explicó en la sección de instrucciones, ya configuraste los secretos necesarios en GitHub. Ahora, según el proveedor que estés utilizando, debes referenciar correctamente las variables correspondientes a esos secretos, y eliminar las que no apliquen a tu caso.

Para ello, dirígete a la sección de trabajos del workflow jobs y localiza el trabajo create-infrastructure.

Dentro de su bloque env, define las variables necesarias para tu proveedor:

Para DigitalOcean, utiliza las variables:

Para AWS, utiliza las variables:

circle-info

Recuerda que solo debes mantener las variables que vayas a utilizar. Si mezclas variables de diferentes proveedores, el despliegue podría fallar.

chevron-rightDefine el usuario SSH para la instanciahashtag

En la sección de trabajos del workflow jobs, localiza el segundo trabajo llamado provision-instance. Dentro de su bloque env, debes definir qué usuario se utilizará para acceder por SSH a la instancia.

Este usuario varía según el proveedor de infraestructura:

Para DigitalOcean, el usuario por defecto es:

Para AWS, el usuario por defecto es:

chevron-rightDefine las variables de entorno que se inyectarán en Ansiblehashtag

En la sección jobs del workflow, localiza el segundo trabajo llamado provision-instance. Dentro de su bloque steps, dirígete al paso 4 llamado "Run Ansible Playbook".

En este paso se genera dinámicamente un archivo llamado vars.yml, que contiene las variables de entorno que serán inyectadas automáticamente en Ansible. Estas variables permiten configurar rutas y servicios de forma automática y generar correctamente el archivo .env necesario para Docker Compose.

Agrega en ese archivo únicamente las variables que realmente necesites:

circle-exclamation
triangle-exclamation

Last updated