Infraestructura como código (IaC): definición, herramientas, ejemplos

La infraestructura como código (IaC) gestiona servidores, redes y servicios en la nube con código versionado. Cómo funciona, herramientas y errores.

¿Qué es la infraestructura como código (IaC)?

La infraestructura como código (IaC, Infrastructure as Code) consiste en describir la infraestructura, como servidores, redes, bases de datos, registros DNS y políticas de acceso, en archivos de código, y crearla o modificarla ejecutando una herramienta en lugar de hacer clic en una consola. Los archivos viven en control de versiones, se revisan como el código de aplicación y se aplican desde un pipeline, normalmente dentro de la entrega continua.

Cómo funciona la IaC

  1. Escribes la infraestructura deseada en una plantilla o programa y la subes a un repositorio.
  2. La herramienta compara el código con lo que existe. Terraform llama a este paso plan; AWS CloudFormation lo muestra como un conjunto de cambios.
  3. Tras la revisión, la herramienta crea, actualiza o elimina recursos mediante la API del proveedor.
  4. La herramienta registra lo que gestiona, para que la siguiente ejecución sepa qué cambiar. Terraform lo guarda en un archivo de estado.

AWS describe CloudFormation en términos parecidos: una plantilla enumera los recursos deseados y, como son archivos de texto, puedes seguir los cambios como en el código fuente y reutilizar la plantilla para crear los mismos recursos en varias regiones.

IaC declarativa e imperativa

Las herramientas declarativas, como Terraform y CloudFormation, describen el estado final y deducen los pasos. Las que usan lenguajes de propósito general, como Pulumi, permiten escribir la infraestructura en un lenguaje de programación; Pulumi indica TypeScript, Python, Go, .NET, Java y YAML. El código declarativo es más fácil de revisar mediante un plan; un lenguaje real ayuda con bucles, condiciones y bibliotecas compartidas. La mayoría de los equipos elige un estilo y se queda con él.

Herramientas habituales

  • Terraform, de HashiCorp, usa su propio lenguaje, HCL, y funciona con muchos proveedores. El 10 de agosto de 2023 HashiCorp anunció el cambio de la licencia MPL 2.0 a la Business Source License para futuras versiones de sus productos.
  • OpenTofu es una bifurcación (fork) de Terraform que, según su FAQ, iniciaron Gruntwork, Spacelift, Harness, Env0, Scalr y otros como respuesta a ese cambio, y que hoy está bajo la Linux Foundation.
  • AWS CloudFormation es el servicio propio de AWS. Las plantillas se escriben en JSON o YAML y se despliegan como pilas (stacks).
  • Pulumi usa lenguajes de propósito general y organiza el trabajo en stacks, por ejemplo uno por entorno.

Si la licencia te importa, lee las condiciones vigentes de la herramienta que elijas; ya han cambiado una vez.

Ejemplo

Este archivo de Terraform declara un bucket de S3. plan muestra que se creará un recurso; apply lo crea. Si lo ejecutas de nuevo no cambia nada, porque el bucket ya coincide con el código.

# main.tf
provider "aws" {
  region = "eu-west-1"
}

resource "aws_s3_bucket" "website" {
  bucket = "my-marketing-site"
  tags = {
    Environment = "production"
  }
}
terraform init
terraform plan   # preview the changes
terraform apply  # make them

Por qué los equipos usan IaC

  • Entornos repetibles. Desarrollo, preproducción y producción salen del mismo código.
  • Cambios revisables. Una pull request muestra qué cambiará antes de que cambie.
  • Trazabilidad. El historial de versiones registra quién cambió qué y cuándo.
  • Recuperación más rápida. Un entorno perdido puede reconstruirse desde el código, aunque los datos necesitan sus propias copias de seguridad.

Errores habituales

  • Cambios manuales en la consola. Provocan deriva (drift): la realidad deja de coincidir con el código y el siguiente plan intenta deshacerlos.
  • El estado en git. El estado puede contener secretos. Usa un backend remoto. En Terraform sobre S3 el bloqueo es opcional mediante use_lockfile, y la documentación indica que el bloqueo con DynamoDB está obsoleto.
  • Un único estado para todo. Un solo error afecta entonces a todos los entornos. Divide por entorno y por sistema.
  • Aplicar sin leer el plan. Presta especial atención a lo marcado para destruir o reemplazar.
  • Secretos en el código. Haz referencia a un gestor de secretos.
  • Versiones sin fijar. Fija las versiones de la herramienta y de los proveedores para que una nueva versión no cambie un plan.

IaC, pruebas y monitorización

La IaC hace que un cambio sea fácil, no seguro. Un nuevo tipo de instancia, una regla de escalado modificada o una región adicional pueden alterar el comportamiento bajo tráfico, así que ejecuta una prueba de carga contra el nuevo entorno antes de confiar en él; la guía sobre validar el autoescalado de infraestructura muestra la idea, y buenas prácticas de CI/CD explica dónde encajan esas comprobaciones en el pipeline. Después del lanzamiento, la monitorización de infraestructura y la monitorización sintética indican si sigue funcionando.

LoadFocus no aprovisiona infraestructura. Su página de monitorización como código describe mantener los monitores en Git como YAML o JavaScript tipado y desplegarlos con la herramienta de línea de comandos @loadfocus/monitoring desde CI. Esa página enumera comprobaciones de API, navegador, multipaso, TCP y heartbeat, además de canales de alerta, ventanas de mantenimiento y páginas de estado como recursos que se pueden gestionar así.

Preguntas frecuentes: infraestructura como código

¿Qué diferencia hay entre IaC y gestión de configuración?

La IaC aprovisiona infraestructura como redes, bases de datos y servidores. Las herramientas de gestión de configuración, como Ansible, preparan el software dentro de máquinas que ya existen. El límite es difuso y algunas herramientas hacen ambas cosas.

¿Terraform, OpenTofu o CloudFormation?

CloudFormation encaja con equipos que usan solo AWS y quieren un servicio gestionado. Terraform y OpenTofu sirven a equipos que trabajan con varios proveedores. Revisa las condiciones de licencia antes de elegir entre ambos.

¿Qué es la deriva (drift)?

Es cuando la infraestructura real difiere de lo que declara el código, normalmente tras un cambio manual. Ejecuta un plan con regularidad para detectarla y luego actualiza el código o revierte el recurso.

¿Dónde guardo el estado de Terraform?

En un backend remoto con bloqueo, por ejemplo un bucket de S3 con use_lockfile activado, y no en git ni en un portátil.

¿Puedo usar IaC con Kubernetes?

Sí. Kubernetes ya es declarativo, así que los manifiestos son una forma de IaC, y herramientas como Terraform o Pulumi pueden gestionar los clústeres y los recursos de nube que los rodean.

¿Qué tan rápido es tu sitio web?

Mejora su velocidad y SEO sin problemas con nuestra Prueba de Velocidad gratuita.

Prueba de velocidad de sitio web gratis

Analice la velocidad de carga de su sitio web y mejore su rendimiento con nuestro comprobador de velocidad de página gratuito.