RECURSOS CLOUD
Infrastructure as Code: conceptos
Comprende cómo definir, versionar y gestionar infraestructura mediante código y procesos reproducibles.
GUÍA DE CONSULTA
¿Qué es Infrastructure as Code?
Infrastructure as Code (IaC)es un enfoque para definir y gestionar infraestructura mediante archivos de configuración que pueden almacenarse, revisarse, versionarse y automatizarse.
En lugar de crear y modificar manualmente cada recurso, se describe mediante código la infraestructura que debe existir.
Configuración
│
▼
Herramienta IaC
│
▼
Proveedor / API
│
▼
InfraestructuraLa infraestructura puede incluir redes, máquinas virtuales, almacenamiento, bases de datos, reglas de seguridad, balanceadores y otros recursos proporcionados por una plataforma.
El objetivo es conseguir una infraestructura reproducible, trazable y automatizable.
ENFOQUE
Gestión manual e Infrastructure as Code
En una administración manual, los recursos pueden crearse mediante una consola gráfica o ejecutando operaciones individuales.
GESTIÓN MANUAL
Administrador
│
▼
Consola / comandos
│
▼
InfraestructuraEste enfoque puede resultar válido para determinadas operaciones, pero dificulta reproducir exactamente una infraestructura cuando aumenta su complejidad.
Con Infrastructure as Code, la definición se conserva como archivos:
INFRASTRUCTURE AS CODE
Repositorio
│
▼
Archivos IaC
│
▼
Automatización
│
▼
InfraestructuraEsto permite revisar qué debe existir y mantener un historial de los cambios realizados sobre su definición.
MODELOS
Enfoque declarativo e imperativo
Las herramientas de automatización pueden utilizar diferentes modelos para describir los cambios.
Enfoque imperativo
En un modelo imperativose especifican las acciones que deben realizarse.
1. Crear una red
2. Crear una subred
3. Crear un servidor
4. Conectar el servidor a la subredEnfoque declarativo
En un modelo declarativose describe el estado que se desea obtener.
Red: existe
Subred: pertenece a la red
Servidor: existe conectado a la subredLa herramienta determina qué operaciones son necesarias para aproximar la infraestructura real al estado declarado.
Terraform utiliza principalmente este segundo enfoque.
IMPLEMENTACIÓN
Terraform
Terraformes una herramienta de Infrastructure as Code que permite definir y gestionar recursos mediante archivos de configuración.
La configuración de Terraform utiliza HCL (HashiCorp Configuration Language).
Un ejemplo simplificado de un recurso puede tener esta estructura:
resource "tipo_recurso" "nombre_local" {
propiedad = "valor"
}La definición concreta depende del proveedor y del tipo de recurso utilizado.
Terraform interpreta la configuración, consulta los proveedores correspondientes y determina las operaciones necesarias.
Archivos .tf
│
▼
Terraform
│
▼
Provider
│
▼
API de la plataforma
│
▼
RecursosPROVEEDORES
Providers y recursos
Un providerpermite a Terraform interactuar con una plataforma, servicio o API.
El proveedor implementa los tipos de recursos y fuentes de datos que pueden utilizarse desde una configuración.
Terraform
│
├── Provider A ──► Plataforma A
│
├── Provider B ──► Plataforma B
│
└── Provider C ──► Servicio CEsto permite utilizar un mismo modelo de trabajo para gestionar recursos pertenecientes a diferentes servicios.
Recursos
Un resourcerepresenta un elemento que Terraform debe gestionar.
Puede corresponder, dependiendo del proveedor, a una red, una instancia, un volumen, una regla, una base de datos u otro componente.
ESTADO Y CAMBIOS
Configuración, estado e infraestructura real
Para comprender el funcionamiento de una herramienta como Terraform conviene distinguir tres elementos:
Configuración
Representa la infraestructura declarada en los archivos utilizados por Terraform.
Estado
Terraform mantiene información de estado para relacionar los recursos definidos en la configuración con los recursos que administra.
Infraestructura real
Es el conjunto de recursos que existe realmente en el proveedor o plataforma.
CONFIGURACIÓN deseada
│
▼
TERRAFORM
↙ ↘
ESTADO INFRAESTRUCTURA REALTerraform utiliza esta información para determinar qué cambios deben realizarse cuando se modifica la configuración.
ESTADO
Terraform state
Terraform utiliza un estadopara mantener información sobre los recursos que gestiona.
En un uso local, este estado puede almacenarse en un archivo como:
terraform.tfstateEl estado es un componente importante del funcionamiento de Terraform y debe gestionarse adecuadamente.
En entornos de equipo es habitual utilizar mecanismos de almacenamiento remoto y, cuando la solución lo permite, mecanismos de bloqueo para reducir conflictos derivados de modificaciones concurrentes.
El estado puede contener información sensible relacionada con la infraestructura, por lo que debe protegerse mediante controles de acceso adecuados.
GESTIÓN DE CAMBIOS
Cambios fuera de IaC y drift
La infraestructura puede modificarse fuera del flujo de Infrastructure as Code, por ejemplo mediante una consola administrativa.
Esto puede provocar diferencias entre lo declarado y lo que existe realmente.
Configuración IaC
│
│ ≠
│
Infraestructura realEstas desviaciones suelen denominarse configuration drifto simplemente drift.
Mantener los cambios dentro de un proceso controlado ayuda a reducir estas diferencias y facilita conocer por qué se modificó la infraestructura.
FLUJO DE TRABAJO
Flujo básico con Terraform
Un flujo de trabajo básico puede organizarse alrededor de la inicialización, validación, planificación y aplicación de cambios.
Configuración
│
▼
terraform init
│
▼
terraform validate
│
▼
terraform plan
│
▼
Revisión
│
▼
terraform apply
│
▼
Infraestructuraterraform init
Inicializa el directorio de trabajo y prepara los elementos necesarios para utilizar la configuración.
terraform initterraform fmt
Aplica el formato convencional de Terraform a los archivos de configuración.
terraform fmtterraform validate
Comprueba que la configuración es sintácticamente válida e internamente consistente.
terraform validateterraform plan
Genera una propuesta de cambios antes de aplicarlos.
terraform planEsta fase permite revisar qué recursos se crearán, modificarán o eliminarán.
terraform apply
Ejecuta las operaciones necesarias para aplicar los cambios previstos.
terraform applyterraform destroy
Permite planificar y eliminar los recursos gestionados por una configuración cuando realmente se desea destruir esa infraestructura.
terraform destroyEsta operación debe utilizarse con especial precaución.
REUTILIZACIÓN
Variables y outputs
Las variables permiten parametrizar una configuración y evitar repetir valores que pueden cambiar entre distintos usos o entornos.
variable "entorno" {
type = string
default = "desarrollo"
}El valor puede utilizarse posteriormente desde la configuración:
var.entornoOutputs
Los outputspermiten exponer información obtenida a partir de los recursos gestionados.
output "nombre_recurso" {
value = recurso.ejemplo.nombre
}Resultan útiles para mostrar información relevante o proporcionar valores a otros procesos de automatización.
RELACIONES
Dependencias entre recursos
Los recursos de una infraestructura suelen depender unos de otros.
Por ejemplo, una instancia puede necesitar una red creada previamente.
RED
│
▼
SUBRED
│
▼
INSTANCIACuando una configuración hace referencia a atributos de otro recurso, Terraform puede inferir dependencias y construir un grafo para determinar el orden adecuado de las operaciones.
Esto evita tener que definir manualmente el orden de muchas operaciones.
ORGANIZACIÓN
Módulos
Un módulopermite agrupar recursos relacionados en una unidad reutilizable.
Configuración principal
│
├── Módulo red
│ ├── Red
│ └── Subred
│
└── Módulo aplicación
├── Instancia
└── Otros recursosLos módulos ayudan a organizar configuraciones grandes, reducir duplicaciones y reutilizar patrones de infraestructura.
Como cualquier componente reutilizable, conviene mantener interfaces claras mediante variables y outputs y controlar las versiones utilizadas.
CONTROL DE CAMBIOS
Infrastructure as Code y Git
Una de las principales ventajas de definir infraestructura mediante archivos es que estos pueden mantenerse bajo un sistema de control de versiones como Git.
Cambio IaC
│
▼
Commit
│
▼
Pull request
│
▼
Revisión
│
▼
Plan
│
▼
ApplyEste enfoque permite conocer qué se modificó, quién realizó el cambio y revisar la modificación antes de aplicarla.
Además, facilita integrar IaC dentro de pipelines de CI/CD para automatizar validaciones y otras fases del proceso.
SEGURIDAD
Credenciales y secretos
Las herramientas IaC necesitan permisos para crear, modificar o eliminar recursos.
Las credenciales utilizadas para acceder a los proveedores deben tratarse como información sensible.
No deberían incluirse directamente en archivos que vayan a almacenarse en un repositorio.
Repositorio
│
├── Configuración IaC
│
└── NO incluir secretos
│
▼
Gestor de secretos / credenciales segurasTambién conviene aplicar el principio de mínimo privilegio: las credenciales utilizadas por la automatización deberían disponer únicamente de los permisos necesarios.
RECOMENDACIONES
Buenas prácticas
- Mantener la configuración de infraestructura bajo control de versiones.
- Revisar los cambios antes de aplicarlos.
- Utilizar
terraform fmtyterraform validatecomo comprobaciones básicas. - Revisar cuidadosamente el resultado de
terraform plan. - Evitar modificaciones manuales que puedan producir diferencias respecto a la configuración gestionada.
- Proteger adecuadamente el estado y controlar quién puede acceder a él.
- No almacenar secretos directamente en los archivos de configuración versionados.
- Aplicar el principio de mínimo privilegio a las credenciales de automatización.
- Utilizar módulos cuando permitan reducir duplicaciones y mejorar la organización.
- Controlar las versiones de proveedores y módulos para favorecer ejecuciones reproducibles.
Infrastructure as Code no consiste únicamente en escribir archivos de configuración. Requiere también un proceso controlado de revisión, aplicación y mantenimiento de cambios.
IDEAS CLAVE
Resumen
REPOSITORIO
│
▼
CONFIGURACIÓN IaC
│
▼
terraform plan
│
▼
REVISIÓN
│
▼
terraform apply
│
▼
INFRAESTRUCTURA
│
▼
ESTADOInfrastructure as Codepermite definir la infraestructura mediante archivos que pueden versionarse, revisarse y automatizarse.
En un enfoque declarativo se describe el estado deseadoy la herramienta determina las operaciones necesarias para alcanzarlo.
En Terraform, providers, resources, variables, outputs, módulosy estadoforman parte de los conceptos fundamentales del modelo de trabajo.
El flujo habitual consiste en definir → validar → planificar → revisar → aplicar → mantener.
RECURSOS RELACIONADOS
Recursos relacionados
PARA AMPLIAR
Documentación de referencia
Documentación oficial para profundizar en Terraform, consultar el lenguaje de configuración y revisar el funcionamiento de providers, recursos, estado y flujo de trabajo.