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

PrincipioDescripciónBeneficio QA
Control de versionesEl código de infraestructura vive en GitRastrear cambios, revisar modificaciones
IdempotenciaEjecutar el mismo código dos veces produce el mismo resultadoCreación confiable de entornos
ReproducibilidadEl mismo código crea entornos idénticos cada vezEntornos de test consistentes
Auto-documentaciónEl código ES la documentaciónSin páginas wiki desactualizadas
RevisableLos cambios pasan por code reviewDetectar 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

HerramientaTipoMejor ParaCurva de Aprendizaje
TerraformProvisioning declarativoInfraestructura cloudMedia
AnsibleConfiguración imperativaSetup de servidoresBaja
PulumiDeclarativo (lenguajes reales)Equipos que prefieren TypeScript/PythonMedia
CloudFormationDeclarativo (solo AWS)Entornos exclusivamente AWSMedia
HelmDeclarativo (solo K8s)Despliegue de aplicaciones KubernetesMedia

Conclusiones Clave

  1. IaC hace entornos de test reproducibles — define una vez, crea muchas veces
  2. Versiona la infraestructura — los cambios se rastrean, revisan y son reversibles
  3. Terraform plan antes de apply — siempre previsualiza cambios
  4. Usa módulos para patrones reutilizables — los entornos de test deben ser despliegues de una línea
  5. Destruye después de testear — la infraestructura efímera ahorra costos