DevOpsPeru meetup 2025: Testing en Infrastructure as Code con Terraform

mario21ic 0 views 39 slides Oct 09, 2025
Slide 1
Slide 1 of 39
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39

About This Presentation

Una breve introducción al testing (unitario, end to end, etc) en la infraestructura como código usando Terraform


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..

Preguntas ?