🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Automatización con Ansible y Terraform en Linux

Actualizado el 21 de diciembre de 2025

El binomio imparable: Ansible y Terraform en la automatización Linux

La gestión de infraestructura moderna ha superado la era del acceso SSH manual y los scripts frágiles. Hoy, en el horizonte del sysadmin 2025, la capacidad de orquestar entornos completos con infraestructura como código (IaC) no es un lujo, sino un requisito de supervivencia profesional. Dos herramientas dominan este espacio: Ansible y Terraform. Comprender cómo se complementan y cómo aplicarlas en automatización Linux es la diferencia entre un administrador de sistemas y un arquitecto de plataformas.

Este artículo desglosa el uso práctico de ambas herramientas, desde la teoría hasta ejemplos de código ejecutable, pasando por las mejores prácticas de integración.

¿Por qué necesitas ambas herramientas?

Antes de profundizar, es crucial entender que Ansible y Terraform no son competidores, sino aliados. Terraform se especializa en el aprovisionamiento (crear, modificar y destruir recursos de infraestructura), mientras que Ansible sobresale en la configuración y el despliegue de software sobre esos recursos.

  • Terraform: Define el estado deseado de tu infraestructura en la nube o on-premise (VPC, subredes, instancias EC2, balanceadores). Es declarativo y gestiona el ciclo de vida completo.
  • Ansible: Una vez que las máquinas existen, Ansible se conecta a ellas (sin agente, solo SSH) para instalar paquetes, configurar servicios, desplegar aplicaciones y gestionar usuarios. Es procedural o declarativo según el módulo.

[INFO] El flujo de trabajo típico del sysadmin 2025 es: Terraform levanta los servidores Linux, y Ansible los configura. Esta separación de responsabilidades evita el acoplamiento y facilita la reutilización.

Terraform: El arquitecto de la infraestructura Linux

Terraform utiliza su propio lenguaje de configuración (HCL) para describir la infraestructura. En el contexto de automatización Linux, suele usarse para crear máquinas virtuales, contenedores o servidores bare metal.

Ejemplo práctico: Aprovisionar una VM en AWS con Terraform

Creamos un archivo main.tf que define un servidor Ubuntu.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web_server" {
  ami           = "ami-0c02fb55956c7d316" # Ubuntu 22.04 LTS
  instance_type = "t3.medium"
  key_name      = "mi-clave-ssh"

  tags = {
    Name = "Servidor-Web-Productivo"
    ManagedBy = "Terraform"
  }

  user_data = <<-EOF
    #!/bin/bash
    apt-get update -y
    apt-get install -y python3
    EOF
}

[TIP] El bloque user_data es ideal para instalar Python, necesario para que Ansible funcione sin agente. Sin Python en el servidor destino, Ansible no puede ejecutar módulos.

Ejecutamos terraform init && terraform apply y en segundos tenemos una instancia lista. Terraform registra el estado en un archivo terraform.tfstate que es crítico para futuras actualizaciones.

Buenas prácticas con Terraform en Linux

  • Usa módulos: No escribas todo en un solo archivo. Separa la red, las instancias y los balances en módulos reutilizables.
  • Remoto state: Almacena el estado en un backend remoto (S3, GCS, o Terraform Cloud) para trabajar en equipo.
  • Variables y outputs: Parametriza todo (tamaño de instancia, AMI, regiones). Los outputs te servirán para alimentar a Ansible.

Ansible: El afinador de servidores Linux

Una vez que Terraform ha creado las máquinas, Ansible toma el control. Su naturaleza agentless (solo necesita SSH y Python en el destino) lo convierte en la herramienta ideal para automatización Linux en entornos heterogéneos.

Estructura de un proyecto Ansible

Un playbook típico para configurar el servidor web recién creado:

---
- name: Configurar servidor web Linux
  hosts: webservers
  become: yes
  vars:
    nginx_port: 8080
    app_user: "deploy"

  tasks:
    - name: Actualizar cache de paquetes
      apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Instalar Nginx
      apt:
        name: nginx
        state: present

    - name: Configurar virtualhost
      template:
        src: "vhost.conf.j2"
        dest: "/etc/nginx/sites-available/default"
      notify: restart nginx

    - name: Crear usuario de aplicación
      user:
        name: "{{ app_user }}"
        state: present
        shell: /bin/bash
        groups: sudo

  handlers:
    - name: restart nginx
      service:
        name: nginx
        state: restarted

[WARNING] Ansible ejecuta tareas en orden. Si una tarea falla (por ejemplo, un repositorio inaccesible), el playbook se detiene por defecto. Usa ignore_errors: yes solo cuando sea estrictamente necesario.

Inventarios dinámicos: El puente con Terraform

Para que Ansible sepa qué servidores configurar, necesitamos un inventario. En lugar de un archivo estático, usamos un inventario dinámico que consulta el estado de Terraform. Existen plugins como terraform.py o community.general.terraform que convierten los outputs de Terraform en un inventario de Ansible.

# Ejemplo de inventario dinámico con script
ansible-inventory -i terraform-inventory.py --list

Esto genera algo como:

{
  "_meta": {
    "hostvars": {
      "web_server": {
        "ansible_host": "54.123.45.67",
        "ansible_user": "ubuntu",
        "private_ip": "10.0.1.5"
      }
    }
  },
  "webservers": ["web_server"]
}

[INFO] Este enfoque elimina el error humano de escribir IPs manualmente. Terraform crea la infra, y Ansible la configura automáticamente.

Integración completa: El flujo de trabajo del sysadmin 2025

Un sistema robusto de infraestructura como código combina ambas herramientas en un pipeline de CI/CD. Veamos el flujo ideal:

  1. Desarrollo: El equipo escribe código Terraform y Ansible en un repositorio Git.
  2. Plan: Terraform plan muestra los cambios de infraestructura (nuevas VMs, cambios de red).
  3. Apply: Se ejecuta Terraform, que crea o modifica los recursos. El user_data de cada VM instala Python y configura la clave SSH de Ansible.
  4. Configuración: Un pipeline (GitLab CI, Jenkins, GitHub Actions) ejecuta Ansible contra el inventario dinámico generado por Terraform.
  5. Validación: Pruebas de integración verifican que Nginx responda, que los usuarios existan y que los servicios estén activos.

Ejemplo de pipeline CI/CD en YAML

stages:
  - terraform-plan
  - terraform-apply
  - ansible-configure

terraform-plan:
  stage: terraform-plan
  script:
    - cd terraform/
    - terraform init
    - terraform plan -out=plan.tfplan

terraform-apply:
  stage: terraform-apply
  script:
    - cd terraform/
    - terraform apply plan.tfplan

ansible-configure:
  stage: ansible-configure
  script:
    - cd ansible/
    - ansible-playbook -i terraform-inventory.py site.yml

[WARNING] Nunca ejecutes terraform apply y ansible-playbook en el mismo stage. Si Ansible falla, quieres conservar la infraestructura para depurar, no que Terraform la destruya automáticamente.

Casos de uso avanzados en automatización Linux

Gestión de clústeres Kubernetes

Terraform puede aprovisionar un clúster Kubernetes (EKS, AKS, o kubeadm manual), y Ansible puede configurar los nodos workers, instalar Helm charts, y desplegar aplicaciones base como Ingress Controller o Prometheus.

# Ansible: Configurar nodo worker Kubernetes
- name: Unir nodo al clúster
  shell: "kubeadm join {{ master_ip }}:6443 --token {{ token }} --discovery-token-ca-cert-hash sha256:{{ hash }}"
  when: inventory_hostname in groups['workers']

Parcheo y actualizaciones masivas

Con Ansible, puedes lanzar una actualización de seguridad a cientos de servidores Linux en paralelo. Combinado con Terraform, puedes crear un rolling update: Terraform lanza nuevas instancias con la AMI actualizada, y Ansible las configura antes de darlas de alta en el balanceador.

Entornos multi-nube y on-premise

Terraform abstrae los proveedores (AWS, Azure, GCP, vSphere, OpenStack). Ansible, al ser agnóstico, configura cualquier servidor Linux, sin importar dónde se ejecute. Esto permite tener un único código de configuración para entornos híbridos.

Mejores prácticas para el sysadmin moderno

  1. Versiona todo: Código Terraform, playbooks Ansible, inventarios, y variables. Usa Git como fuente única de verdad.
  2. Usa roles de Ansible: Organiza las tareas en roles (nginx, docker, users) para reutilizarlas entre proyectos.
  3. Secretos seguros: Nunca pongas contraseñas o claves SSH en el código. Usa Ansible Vault para cifrar variables, y Terraform para referenciar secretos desde un gestor (AWS Secrets Manager, HashiCorp Vault).
  4. Idempotencia: Tanto Terraform como Ansible deben poder ejecutarse múltiples veces sin efectos secundarios. Prueba que terraform plan no muestre cambios si no ha habido modificaciones.
  5. Monitoreo post-despliegue: Integra la salida de Ansible (por ejemplo, que Nginx esté activo) con sistemas de monitoreo como Prometheus o Datadog.

Conclusión: Prepárate para el sysadmin 2025

La automatización Linux con Ansible y Terraform no es una moda pasajera; es la base de la infraestructura moderna. Como sysadmin 2025, dominar estas herramientas te permite:

  • Reducir errores humanos en la configuración de servidores.
  • Escalar entornos de decenas a miles de máquinas con la misma confianza.
  • Recuperar infraestructura rápidamente tras un desastre (solo con terraform apply y un playbook).
  • Colaborar con equipos de desarrollo y operaciones bajo un mismo lenguaje: el código.

[TIP] Empieza por un proyecto pequeño: automatiza la creación de un servidor web de prueba con Terraform, y luego configúralo con Ansible. Verás el poder de la infraestructura como código en acción.

La inversión en aprender estas herramientas no solo optimiza tu trabajo diario, sino que te posiciona como un profesional imprescindible en el ecosistema Linux de 2025. Automatiza, versiona, y duerme tranquilo.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel