DevOpsPeru meetup 2025: Testing en Infrastructure as Code con Terraform
mario21ic
0 views
39 slides
Oct 09, 2025
Slide 1 of 39
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
About This Presentation
Una breve introducción al testing (unitario, end to end, etc) en la infraestructura como código usando Terraform
Size: 6.65 MB
Language: es
Added: Oct 09, 2025
Slides: 39 pages
Slide Content
Testing en Infrastructure as Code B y Mario Inga
Mario Inga Software Engineer Aws Community Builder DevOps Institute Ambassador Security fan Comunidades : DevOps Perú, Docker Lima, Cloud Native Peru. Tw: @mario21ic
Anécdota 1. Era un viernes 5pm, empezaba a registrar mis avances y pendientes para la siguiente semana .
Anécdota 2. La web dió 503 y todos en pánico . Fue la web app, database, infrastructure config (port, resource, etc ), AMI, cloud provider, un ataque DDoS o hackeo ?
Anécdota 3. Troubleshoot en Prod: App logs Database y otros cuellos de botella App en cada EC2 Comunicación entre EC2 y LB Load balancer (LB) configuration
Anécdota 4. Root cause: alguien cambió el “health check” en el “target group” del load balancer. Por agregar Tag en cada EC2 de Prod. “ IaC sin tests”
Anécdota 5. Es tiempo de aplicar tests automatizados a la Infra! Requieren conocimientos y toma tiempo implementarlos . Cómo convencer a los jefes?
Beneficios de testing Detecta bugs temprano en el desarrollo . Facilita cambios y refactorizaciones sin miedo . Mejora la calidad y estabilidad del software. Documenta el comportamiento esperado del código .
Beneficios de testing Reduce el tiempo de debugging. Asegura que nuevas funciones no rompan lo existente ( regresiones ). Permite integrar CI/CD de forma confiable . Mejora la colaboración entre desarrolladores . Facilita el onboarding de nuevos miembros
Mismo enfoque? Compila o interpreta ? Cuál es el Artifact? Hay versionamiento ? “En mi local funciona ”?
- Terraform Workflow Crea Infra
IaC mismo enfoque ? HCL es Declarativo, no imperativo. Gestión del Estado (*.tfstate) Idempotence Reconciliación automática Inmutable(?)
Por qué testear si es inmutable? Inmutabilidad ≠ Correctitud Evitar configuraciones inseguras o no deseadas Prevenir impactos en producción Asegurar que los outputs y dependencias sean válidos Cumplir con políticas de gobernanza
"Terraform garantiza que se aplique lo que declaras . Pero no garantiza que lo que declaras sea correcto , seguro y/o eficiente ."
Static analysis Test code SIN apply. Compiler / parser / interpreter Revisar sintaxis e issues estructurales . $ terraform validate
Static analysis: Linters Validar el código para capturar errores comunes . Tools Tflint Tfsec
Static analysis: TFLINT
Static analysis: TfSec
Static analysis: Dry Run Validar el plan SIN apply. Example $ terraform plan
Testing UNIT TESTS
Unit Testing Testear una porción de código . Ya sea método , función , etc Se realiza de forma aislada . NO existía hasta Terraform v1.7.0
Unit Testing Se define en < nombre >. tftest .hcl Cambiar apply por plan
Unit Testing Ejecución : $ terraform test
Unit Testing Simulan un proveedor con mock_provider Sirve tanto para resource y data
Testing INTEGRATION TESTS
Unit tests son suficientes ?
Unit tests son suficientes ?
Unit Testing Aplica sobre la Infra que se crea . Flujo : Crear, Test y Destroy. $ terraform test Alternativas : terratest , etc.
Testing END-TO-END TESTS
End-to-End Testing Testear que la infra creada sea la deseada y funcione según requerimiento Requiere apply “Terraform Check blocks” Alternativas : tf2, terratest , etc
Terraform Check blocks Usado para validar infrastructure. Comprobando código de respuesta de un service.
Resumen Tipo Caso de uso Terraform configuration Unit test Modules, configuration $ terraform test Contract test Modules Input variable validation Pre-conditions/post-conditions Integration test Modules, configuration $ terraform test End-to-end test Configuration Check blocks
Policy As Code Validar que el code cumpla con ciertas políticas . Requiere plan Ejem : tagging, ports, no public, etc , etc Tools: TF2, hashicorp sentinel, etc $ terraform plan -out terraform.tfplan $ python test-policy-as- code.py
Demo
Delivery Pipeline
Y que pasó con la Anecdota ? Implementación de tests en componentes críticos . Luego integration, E2E y Policy as Code. Con la pila de tests se garantizó que la Infra de cada componente estaba OK.
Qué sigue ? Recrear el ejemplo en tu local. Lectura recomendada https://www.slideshare.net/slideshow/how-to-test-infrastructure-code-automated-testing-for-terraform-kubernetes-docker-packer-and-more/192468142 Testing: IaC , AMI, Playbooks, Pipelines, Apps. Tools: packer, ansible, molecule, docker, kubernetes , etc Practice, practice, practice..