Por qué IaC Importa para QA
Infrastructure as Code (IaC) significa definir tu infraestructura — servidores, bases de datos, redes, balanceadores de carga — en archivos de configuración en lugar de crearlos manualmente a través de consolas web o comandos CLI.
Para ingenieros QA, IaC transforma cómo se gestionan los entornos de test. En lugar de pedir a un ingeniero DevOps que “configure un entorno staging” (lo que podría tomar días), defines el entorno en código y lo creas con un solo comando.
Principios de IaC
Declarativo vs. Imperativo
Declarativo (qué quieres): “Quiero una base de datos PostgreSQL, versión 15, con 4GB RAM.” La herramienta determina cómo hacerlo. Terraform usa este enfoque.
Imperativo (cómo hacerlo): “Instala PostgreSQL. Configura memoria a 4GB. Crea usuario. Establece permisos.” Especificas cada paso. Ansible usa este enfoque.
Principios Clave
| Principio | Descripción | Beneficio QA |
|---|---|---|
| Control de versiones | El código de infraestructura vive en Git | Rastrear cambios, revisar modificaciones |
| Idempotencia | Ejecutar el mismo código dos veces produce el mismo resultado | Creación confiable de entornos |
| Reproducibilidad | El mismo código crea entornos idénticos cada vez | Entornos de test consistentes |
| Auto-documentación | El código ES la documentación | Sin páginas wiki desactualizadas |
| Revisable | Los cambios pasan por code review | Detectar errores antes de afectar entornos |
Fundamentos de Terraform
Terraform es la herramienta IaC más popular. Funciona con todos los principales proveedores cloud (AWS, GCP, Azure).
HCL (HashiCorp Configuration Language)
resource "aws_db_instance" "test_db" {
identifier = "qa-test-database"
engine = "postgres"
engine_version = "15.4"
instance_class = "db.t3.micro"
db_name = "testdb"
username = "test_user"
password = var.db_password
allocated_storage = 20
tags = {
Environment = "qa"
ManagedBy = "terraform"
}
}
Flujo de Trabajo Terraform
# Inicializar Terraform
terraform init
# Preview de cambios
terraform plan
# Aplicar cambios
terraform apply
# Destruir infraestructura
terraform destroy
IaC para Entornos de Test
Patrón: Módulo Reutilizable
module "test_env" {
source = "./modules/test-environment"
environment_name = "pr-${var.pr_number}"
app_version = var.git_sha
db_version = "15"
}
Este módulo encapsula todo lo necesario para un entorno de test. Crear uno nuevo para cada PR se convierte en un cambio de una línea.
Ejercicio: Define Infraestructura de Test
Escribe configuración Terraform para un entorno de test con: PostgreSQL (v15), Redis, servidor de aplicación y outputs para strings de conexión.
Solución
terraform {
required_providers {
aws = { source = "hashicorp/aws", version = "~> 5.0" }
}
}
variable "environment" {
type = string
default = "qa"
}
resource "aws_db_instance" "postgres" {
identifier = "${var.environment}-postgres"
engine = "postgres"
engine_version = "15.4"
instance_class = "db.t3.micro"
db_name = "testdb"
username = "testuser"
password = "testpass123"
allocated_storage = 20
skip_final_snapshot = true
tags = { Environment = var.environment }
}
resource "aws_elasticache_cluster" "redis" {
cluster_id = "${var.environment}-redis"
engine = "redis"
node_type = "cache.t3.micro"
num_cache_nodes = 1
tags = { Environment = var.environment }
}
resource "aws_instance" "app" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.small"
tags = { Name = "${var.environment}-app" }
}
output "database_url" {
value = "postgresql://testuser@${aws_db_instance.postgres.endpoint}/testdb"
sensitive = true
}
output "app_url" {
value = "http://${aws_instance.app.public_ip}:3000"
}
Comparación de Herramientas IaC
| Herramienta | Tipo | Mejor Para | Curva de Aprendizaje |
|---|---|---|---|
| Terraform | Provisioning declarativo | Infraestructura cloud | Media |
| Ansible | Configuración imperativa | Setup de servidores | Baja |
| Pulumi | Declarativo (lenguajes reales) | Equipos que prefieren TypeScript/Python | Media |
| CloudFormation | Declarativo (solo AWS) | Entornos exclusivamente AWS | Media |
| Helm | Declarativo (solo K8s) | Despliegue de aplicaciones Kubernetes | Media |
Conclusiones Clave
- IaC hace entornos de test reproducibles — define una vez, crea muchas veces
- Versiona la infraestructura — los cambios se rastrean, revisan y son reversibles
- Terraform plan antes de apply — siempre previsualiza cambios
- Usa módulos para patrones reutilizables — los entornos de test deben ser despliegues de una línea
- Destruye después de testear — la infraestructura efímera ahorra costos