La empresa PalFormación (ejemplo ficticio para entender el caso práctico), dedicada a la formación online, quiere lanzar una plataforma propia de cursos virtuales.
El reto es conseguir una solución que sea:
- Rápida: poder desplegar entornos en minutos.
- Estable: todos los servidores con configuraciones idénticas.
- Escalable: crecer cuando aumente la demanda de alumnos.
- Fiable: con monitorización en tiempo real.
Hasta ahora, el proceso era manual y lento: pedir servidores, instalarlos a mano (Apache, PHP, MySQL…), y vigilarlos con scripts improvisados. Esto llevaba semanas y era poco sostenible.
El objetivo: migrar a una estrategia DevOps moderna basada en Terraform (infraestructura como código), Ansible (automatización de configuración) y Zabbix (monitorización).
Paso 1: Infraestructura con Terraform
PalFormación necesita:
- 2 servidores web para la aplicación.
- 1 servidor de base de datos (MySQL).
- 1 balanceador de carga (HAProxy).
Con Terraform, esta infraestructura se define en código.
Código (extracto
1
main.tf
1 | main.tf |
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 provider "aws" { region = "us-east-1" }
variable "num_frontends" { default = 2 }
resource "aws_instance" "web" {
count = var.num_frontends
ami = "ami-xxxxxxxx" # Ubuntu
instance_type = "t2.micro"
key_name = "mi-clave-ssh"
tags = { Name = "pf-web-${count.index}" }
}
resource "aws_instance" "db" {
ami = "ami-xxxxxxxx"
instance_type = "t2.small"
key_name = "mi-clave-ssh"
tags = { Name = "pf-db" }
}
resource "aws_instance" "lb" {
ami = "ami-xxxxxxxx"
instance_type = "t2.micro"
key_name = "mi-clave-ssh"
tags = { Name = "pf-lb" }
}
Con un simple:
1
2 terraform init
terraform apply -auto-approve
📌 Resultado: servidores creados en AWS con sus IPs y listos para configurar.
Paso 2: Configuración con Ansible
Los servidores están vacíos. Con Ansible aplicamos la configuración necesaria.
- En los web: Nginx + PHP + aplicación PalFormación.
- En el db: MySQL + base inicial.
- En el lb: HAProxy para repartir tráfico.
Código (extracto
1
playbook.yml
1 | playbook.yml |
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 - hosts: web
become: yes
tasks:
- name: Instalar Nginx y PHP
apt:
name: [nginx, php-fpm, php-mysql]
state: present
update_cache: yes
- name: Página inicial
copy:
dest: /var/www/html/index.html
content: "<h1>Bienvenido a PalFormación</h1>"
- hosts: db
become: yes
tasks:
- name: Instalar MySQL
apt:
name: mysql-server
state: present
update_cache: yes
- name: Crear base de datos
mysql_db:
name: palformacion
state: present
- hosts: lb
become: yes
tasks:
- name: Instalar HAProxy
apt:
name: haproxy
state: present
- name: Configurar balanceo
copy:
dest: /etc/haproxy/haproxy.cfg
content: |
frontend http_in
bind *:80
default_backend web_backend
backend web_backend
server web1 {{ hostvars['WEB1'].ansible_host }}:80 check
server web2 {{ hostvars['WEB2'].ansible_host }}:80 check
📌 Resultado: en minutos la plataforma está online, accesible a través del balanceador.
Paso 3: Monitorización con Zabbix
Una plataforma de formación no puede caerse en mitad de un curso.
Por eso, PalFormación instala Zabbix agent en cada servidor:
- Los web reportan CPU, memoria y estado de Nginx.
- El db envía métricas de MySQL.
- El lb informa de conexiones activas.
Código (extracto
1
playbook_zabbix.yml
1 | playbook_zabbix.yml |
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 - hosts: all
become: yes
tasks:
- name: Instalar agente Zabbix
apt:
name: zabbix-agent
state: present
update_cache: yes
- name: Configurar agente
copy:
dest: /etc/zabbix/zabbix_agentd.conf
content: |
Server=zabbix.midominio.com
Hostname={{ inventory_hostname }}
notify: restart zabbix
handlers:
- name: restart zabbix
service:
name: zabbix-agent
state: restarted
📌 Resultado: todos los servidores quedan monitorizados en Zabbix, con paneles y alertas en tiempo real.
Paso 4: Escalabilidad rápida
Antes, añadir servidores era un dolor de cabeza. Ahora basta con cambiar una variable:
1 variable "num_frontends" { default = 5 }
Y aplicar de nuevo:
1
2 terraform apply -auto-approve
ansible-playbook -i inventory.ini playbook.yml
📌 Resultado: Terraform crea 3 servidores adicionales, Ansible los configura y Zabbix los monitoriza. Todo listo en menos de 20 minutos.
Diagrama del flujo en PalFormación
1
2
3
4
5
6
7
8
9 +-------------------+ +-------------------+ +-------------------+
| Terraform | ----> | Ansible | ----> | Zabbix |
| "Construye la | | "Configura apps, | | "Vigila métricas |
| infraestructura" | | bases de datos" | | y envía alertas" |
+-------------------+ +-------------------+ +-------------------+
| Infraestructura creada |
| Aplicación desplegada |
| Monitorización activa |
✅ Conclusión
Con Terraform + Ansible + Zabbix, PalFormación logra:
- Desplegar entornos en minutos en lugar de semanas.
- Mantener todos los servidores configurados de manera idéntica.
- Recibir alertas en tiempo real cuando algo falla.
- Escalar su infraestructura rápidamente con un cambio de variable.
👉 En resumen: Terraform construye, Ansible configura y Zabbix vigila.
Una combinación perfecta para cualquier empresa que quiera ofrecer formación online sin interrupciones y con confianza.