IaC Terraform Ansible Vagrant Pulumi DevOps

Guía de Configuración de Infraestructura como Código (IaC): Terraform, Ansible y más

Una guía completa sobre plantillas de configuración de IaC, incluyendo terraform main.tf, ansible playbooks y configuración de Pulumi para entornos locales y en la nube.

2026-04-11

Guía de Configuración de Infraestructura como Código (IaC)

La Infraestructura como Código (IaC) ha revolucionado la forma en que gestionamos y aprovisionamos recursos informáticos. En lugar de configuraciones manuales, utilizamos código para definir nuestro entorno, garantizando consistencia, escalabilidad y reproducibilidad. Esta guía proporciona plantillas esenciales para las herramientas de IaC más populares: Terraform, Ansible, Vagrant y Pulumi.

1. Plantillas de Configuración de Terraform

Terraform es el estándar de la industria para el aprovisionamiento de infraestructura en la nube. Utiliza HCL (HashiCorp Configuration Language) para definir recursos.

Plantilla main.tf de Terraform

El archivo main.tf es donde defines tus recursos principales. Una plantilla típica de terraform main.tf incluye bloques de recursos para instancias, redes y almacenamiento.

# ejemplo de plantilla terraform main.tf
resource "aws_instance" "web_server" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "Web-Server-01"
  }
}

resource "aws_vpc" "main_vpc" {
  cidr_block = "10.0.0.0/16"
}

Configuración del Proveedor (Provider Config)

El bloque terraform provider config indica a Terraform qué proveedor de la nube (AWS, Azure, GCP, etc.) usar y cómo autenticarse.

# configuración del proveedor de terraform
provider "aws" {
  region = "us-east-1"
  # La autenticación se maneja generalmente mediante variables de entorno o perfiles de AWS CLI
}

provider "google" {
  project = "my-project-id"
  region  = "us-central1"
}

Configuración del Backend de Terraform

La terraform backend config determina dónde almacena Terraform su archivo de estado (state file). Usar un backend remoto como S3 o GCS es crítico para la colaboración en equipo.

# configuración del backend de terraform
terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "prod/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}

2. Playbooks e Inventarios de Ansible

Mientras que Terraform aprovisiona la infraestructura, Ansible destaca en la gestión de la configuración y el despliegue de aplicaciones.

Plantilla de Playbook de Ansible

Una ansible playbook template define las tareas que se ejecutarán en un conjunto de hosts.

---
# plantilla de playbook de ansible
- name: Configurar Servidores Web
  hosts: webservers
  become: yes
  tasks:
    - name: Asegurar que Apache esté instalado
      apt:
        name: apache2
        state: present

    - name: Iniciar servicio Apache
      service:
        name: apache2
        state: started
        enabled: yes

    - name: Copiar index.html
      copy:
        src: files/index.html
        dest: /var/www/html/index.html

Archivo de Inventario de Ansible

El ansible inventory file enumera los hosts y grupos de hosts que gestiona Ansible.

# archivo de inventario de ansible (formato INI)
[webservers]
192.168.1.10
192.168.1.11

[dbservers]
db.example.com ansible_user=admin

[all:vars]
ansible_python_interpreter=/usr/bin/python3

3. Configuración de Vagrant y Pulumi

Para el desarrollo local y el IaC programático moderno, Vagrant y Pulumi son esenciales.

Plantilla y Ejemplo de Vagrantfile

Se utiliza una Vagrantfile template para definir y configurar entornos virtuales de desarrollo.

# ejemplo de Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
  SHELL
end

Configuración de Pulumi (Pulumi Config)

Pulumi config permite gestionar la infraestructura utilizando lenguajes de programación familiares como TypeScript, Python o Go.

// ejemplo de configuración de Pulumi (TypeScript)
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const size = "t2.micro";
const ami = aws.ec2.getAmi({
    filters: [{ name: "name", values: ["amzn-ami-hvm-*"] }],
    owners: ["137112412989"], // ID del propietario para Amazon Linux
    mostRecent: true,
}).then(ami => ami.id);

const server = new aws.ec2.Instance("web-server", {
    instanceType: size,
    ami: ami,
});

export const publicIp = server.publicIp;

4. Preguntas Frecuentes (FAQ)

P: ¿Por qué recibo el error "provider configuration not found" en Terraform?

R: Esto suele suceder si no has ejecutado terraform init después de agregar un nuevo proveedor, o si falta el bloque del proveedor en tus archivos .tf. Asegúrate de tener el bloque required_providers si usas versiones específicas.

P: ¿Cómo soluciono los errores de "ansible unreachable"?

R: Revisa tu ansible inventory file para asegurar que las direcciones IP/nombres de host sean correctos. Verifica la conectividad SSH manualmente y asegúrate de que tu clave SSH esté añadida al agente o especificada en el inventario.

P: ¿Cuál es la diferencia entre Terraform y Pulumi?

R: Terraform usa HCL, un lenguaje específico de dominio, mientras que Pulumi usa lenguajes de programación estándar. Pulumi ofrece más flexibilidad para lógica compleja, pero Terraform tiene un ecosistema y una comunidad más grandes.

P: ¿Cuándo debería usar Vagrant?

R: Usa Vagrant cuando necesites un entorno de desarrollo local consistente y reproducible que imite tu configuración de producción (por ejemplo, usando máquinas virtuales en tu portátil).

Conclusión

Dominar las plantillas de configuración de IaC es clave para construir infraestructuras modernas y resistentes. Ya sea que uses Terraform para el aprovisionamiento, Ansible para la configuración o Pulumi para la gestión de la nube impulsada por código, estas plantillas proporcionan un punto de partida sólido para tu viaje DevOps.

¿Necesitas ayuda para formatear tus archivos JSON o YAML? Visita Tool3M para acceder a una colección de potentes herramientas para desarrolladores.