Skip to content

Infraestructura como Código

Prefacio

¿Alguna vez has vivido esta pesadilla: el servidor de producción se cae y nadie recuerda cómo se configuró originalmente? Iniciar sesión manualmente en el servidor, escribir comandos de memoria, rezar para no equivocarse — este es el día a día de las operaciones tradicionales. La Infraestructura como Código (Infrastructure as Code, IaC) ha cambiado todo esto radicalmente: usar código para definir y gestionar la infraestructura, haciendo que la configuración de servidores sea controlable por versiones, reproducible y auditable, igual que el software.

¿Qué aprenderás en este artículo?

Después de completar este capítulo, obtendrás:

  • Conceptos centrales: entender qué es IaC y por qué es la piedra angular de las operaciones modernas
  • Conocimiento del flujo de trabajo: dominar las cuatro fases del flujo de Terraform: Write → Plan → Apply → Destroy
  • Selección de herramientas: conocer las ventajas y desventajas de herramientas principales como Terraform, Pulumi, CloudFormation
  • Conciencia de riesgos: entender los peligros de la deriva de configuración y los métodos de detección
  • Mejores prácticas: dominar los métodos de gestión ingenieril de proyectos IaC
CapítuloContenidoConcepto clave
Capítulo 1Concepto de IaCOperaciones manuales vs gestión mediante código
Capítulo 2Flujo de trabajo de TerraformWrite → Plan → Apply
Capítulo 3Comparación de herramientasTerraform, Pulumi, CDK
Capítulo 4Deriva de configuraciónDetección, prevención, reparación
Capítulo 5Mejores prácticasModularización, gestión de estado, CI/CD

0. Panorama general: ¿por qué la infraestructura también necesita "código fuente"?

Imagina que eres un chef. Si cocinas cada plato a ojo, hoy una cucharada de sal, mañana dos, el sabor nunca será consistente. Pero si escribes la receta, con la cantidad exacta de cada ingrediente en gramos, cualquiera podrá reproducir el mismo sabor.

La gestión de infraestructura enfrenta el mismo problema. La configuración de un servidor puede involucrar sistema operativo, reglas de red, grupos de seguridad, volúmenes de almacenamiento, variables de entorno y docenas de parámetros más. La configuración manual no solo es propensa a errores, sino que es irreproducible, inauditable e irreversible.

El valor central de IaC

  • Reproducible: el mismo código, sin importar cuántas veces se ejecute, produce el mismo resultado (idempotencia)
  • Controlable por versiones: los cambios de infraestructura se gestionan con Git, quién cambió qué y por qué queda claro de un vistazo
  • Auditable: todos los cambios quedan registrados, cumpliendo con los requisitos de cumplimiento
  • Automatizable: despliegue automático a través de pipelines de CI/CD, eliminando el riesgo de operaciones manuales
  • Colaborativo: los miembros del equipo revisan los cambios de infraestructura mediante Pull Requests, igual que revisan código

1. Concepto de IaC: de "clics manuales" a "declaraciones en código"

El modo de trabajo de las operaciones tradicionales es: iniciar sesión en la consola de la plataforma en la nube, hacer clic manualmente para crear servidores, configurar redes y establecer grupos de seguridad. Este enfoque funciona cuando se gestionan unos pocos servidores, pero cuando la escala crece a decenas o cientos, se convierte en una pesadilla.

La idea central de IaC es: usar código declarativo para describir el estado deseado de tu infraestructura y dejar que las herramientas lo implementen automáticamente. No necesitas decirle a la herramienta "primero crea una VPC, luego una subred, luego un grupo de seguridad" (imperativo), solo necesitas decir "quiero un entorno de red así" (declarativo), y la herramienta calculará automáticamente los pasos necesarios.

交互演示 ── 手动运维 vs 基础设施即代码
手动运维流程
1
🌐
登录云控制台
需要记住密码
2
🖥️
手动创建服务器
配置可能遗漏
3
🔧
配置安全组规则
容易开放过多端口
4
💾
挂载存储卷
大小可能选错
5
🔗
配置负载均衡
路由规则易出错
6
📋
手动记录到文档
文档很快过时
对比维度手动运维基础设施即代码
可重复性每次操作可能不同代码保证完全一致
速度分钟到小时级秒到分钟级
审计追踪依赖人工记录Git 历史自动记录
协作口头传达、截图Code Review、PR 流程
回滚几乎不可能git revert 一键回滚
DimensiónOperaciones manualesInfraestructura como Código
Modo de operaciónIniciar sesión en la consola y hacer clicEscribir archivos de código
ReproducibilidadDepende de documentación y memoriaEl código es la documentación, 100% reproducible
Seguimiento de cambiosSin registro o registro incompletoControl de versiones Git, historial completo
Modo de colaboraciónComunicación verbal, transferencia de documentosRevisión mediante Pull Requests
Capacidad de rollbackOperación inversa manualgit revert + aplicar de nuevo
ConsistenciaGrandes diferencias entre entornosDesarrollo/pruebas/producción completamente idénticos

Declarativo vs Imperativo

  • Declarativo (Declarative): describe "qué quiero", la herramienta calcula automáticamente "cómo hacerlo". Terraform y CloudFormation usan este enfoque. Ventaja: buena idempotencia. Desventaja: flexibilidad limitada.
  • Imperativo (Imperative): describe "cómo hacerlo", ejecutando paso a paso. Ansible y los scripts Shell usan este enfoque. Ventaja: flexibilidad. Desventaja: difícil garantizar idempotencia.
  • Híbrido: Pulumi y AWS CDK se escriben en lenguajes de programación generales, combinando la gestión de estado declarativa con la flexibilidad imperativa.

2. Flujo de trabajo de Terraform: Write → Plan → Apply

Terraform es la herramienta IaC más popular actualmente, desarrollada por HashiCorp. Su flujo de trabajo es claro e intuitivo, dividido en cuatro fases, como el proceso de desarrollo de software "codificar → revisar → desplegar → limpiar".

交互演示 ── Terraform 工作流四阶段
📝Write
🔍Plan
🚀Apply
🗑️Destroy
📝Write ── 编写基础设施代码

用声明式语言(HCL)描述你期望的基础设施状态。代码就是文档,可以提交到 Git 进行版本管理和 Code Review。

Terminal
📄使用 .tf 文件描述资源
🔧HCL 语法简洁易读
📦支持模块化复用

Flujo de trabajo en cuatro fases

  1. Write (Escribir): escribir archivos de definición de infraestructura (.tf) en HCL (HashiCorp Configuration Language). Declarar los recursos que necesitas: servidores, bases de datos, redes, etc.
  2. Plan (Planificar): ejecutar terraform plan. Terraform compara el estado actual con el estado deseado y genera un "plan de ejecución" que te dice qué recursos pretende crear, modificar o eliminar. Esta es la red de seguridad que te permite confirmar los cambios antes de ejecutarlos realmente.
  3. Apply (Ejecutar): una vez confirmado que el plan es correcto, ejecutar terraform apply. Terraform crea o modifica los recursos según el plan. Al completarse, el estado actual se guarda en el archivo de estado (terraform.tfstate).
  4. Destroy (Destruir): cuando ya no se necesita, ejecutar terraform destroy para limpiar todos los recursos y evitar costes innecesarios.
ComandoFunción¿Modifica la infraestructura?Caso de uso
terraform initInicializar el proyecto, descargar ProviderNoPrimera vez o al añadir un nuevo Provider
terraform planPrevisualizar cambios, generar plan de ejecuciónNoDebe ejecutarse antes de cada cambio
terraform applyEjecutar cambios, crear/modificar recursosEjecutar después de confirmar el plan
terraform destroyDestruir todos los recursosLimpiar entorno de pruebas, retirar servicios
terraform stateVer/gestionar archivo de estadoDepende de la operaciónMigración de estado, importación de recursos

3. Comparación de herramientas: elegir la herramienta IaC adecuada

El campo de IaC tiene múltiples herramientas, cada una con sus fortalezas. Al elegir una herramienta, hay que considerar la pila tecnológica del equipo, la plataforma en la nube y la escala del proyecto. No existe la "mejor" herramienta, solo la más adecuada para tu escenario.

交互演示 ── 主流 IaC 工具对比
选择要对比的工具(至少选 2 个):
特性🟣Terraform🟠CloudFormation
厂商HashiCorpAWS
配置语言HCLYAML / JSON
声明式/命令式声明式声明式
多云支持原生多云仅 AWS
状态管理State 文件AWS 托管
学习曲线中等中等偏高
社区生态非常活跃AWS 生态
最佳场景多云/混合云纯 AWS 环境
点击下方工具名称查看详细介绍和代码示例
HerramientaLenguajeSoporte de nubeCurva de aprendizajeCaso de uso
TerraformHCLMulti-nube (AWS/Azure/GCP)MediaEntornos multi-nube, colaboración en equipo
PulumiPython/TS/GoMulti-nubeBaja (lenguajes de programación familiares)Amigable para desarrolladores, lógica compleja
AWS CloudFormationJSON/YAMLSolo AWSMediaEntorno exclusivamente AWS
AWS CDKPython/TS/JavaSolo AWSBajaAWS + preferencia por lenguajes de programación
AnsibleYAMLMulti-nube + bare metalBajaGestión de configuración, entornos híbridos

¿Cómo elegir?

  • Equipos emergentes / Nube única: CloudFormation (AWS) o la herramienta nativa de la plataforma en la nube correspondiente, mejor integración con el ecosistema
  • Multi-nube / Equipos medianos/grandes: Terraform, la comunidad más grande, más Providers disponibles, más fácil de contratar
  • Equipos liderados por desarrolladores: Pulumi o CDK, escribir infraestructura en lenguajes de programación familiares, buen soporte IDE
  • Necesidad de gestión de configuración: Ansible, excelente para configuración interna de servidores (instalar software, modificar archivos de configuración)

4. Deriva de configuración: una bomba de relojería silenciosa

La deriva de configuración (Configuration Drift) es el enemigo más insidioso en la práctica de IaC. Se refiere a la desviación gradual entre el estado real de la infraestructura y el estado definido en el código.

¿Cómo se produce esta desviación? Alguien, para "arreglar rápidamente" un problema en producción, inicia sesión directamente en la consola y modifica manualmente las reglas del grupo de seguridad; alguien, para depurar, aumenta temporalmente la configuración de un servidor pero olvida revertirla. Estos "pequeños cambios" se acumulan con el tiempo, provocando una desconexión grave entre el código y el entorno real.

交互演示 ── 配置漂移:无声的定时炸弹
初始部署
手动修改
又一次修改
漂移加剧
IaC 检测
期望状态(代码定义)
🖥️
Server-A
Nginx 1.24 | 443 | 2GB
🖥️
Server-B
Nginx 1.24 | 443 | 2GB
🖥️
Server-C
Nginx 1.24 | 443 | 2GB
状态一致
实际状态(线上环境)
🖥️
Server-A
Nginx 1.24 | 443 | 2GB
🖥️
Server-B
Nginx 1.24 | 443 | 2GB
🖥️
Server-C
Nginx 1.24 | 443 | 2GB
第 0 步:通过 IaC 初始部署

团队使用 Terraform 部署了 3 台 Web 服务器,配置完全一致:Nginx 1.24、端口 443、2GB 内存。代码和实际状态完美匹配。

关键教训
🚫禁止手动修改线上环境,所有变更必须通过代码
🔍定期运行 terraform plan 检测漂移
🔒限制生产环境的 SSH 权限,减少人为干预
📋建立变更审批流程(PR → Review → Merge → Apply)

Los peligros de la deriva de configuración

  1. Irreproducible: el entorno descrito en el código no coincide con el entorno real, aparecen problemas al crear nuevos entornos
  2. Fallo de rollback: se cree que revertir a la versión anterior restaurará todo, pero el entorno real ya ha sido modificado manualmente
  3. Riesgos de seguridad: puertos abiertos manualmente, permisos relajados pueden ser olvidados, convirtiéndose en puntos de entrada para ataques
  4. Auditoría ineficaz: las auditorías de cumplimiento se basan en el código, pero el código no refleja el estado real
Medida preventivaDescripción
Prohibir cambios manualesRestringir permisos de operación en la consola mediante políticas IAM
Detección periódica de derivaEjecutar terraform plan periódicamente para verificar diferencias
Reparación automáticaDetectada la deriva, ejecutar automáticamente apply para restaurar la consistencia
Auditoría de cambiosHabilitar CloudTrail y otros logs de auditoría para rastrear el origen de todos los cambios

5. Mejores prácticas: hacer que el proyecto IaC evolucione de forma sostenible

El código IaC, al igual que el código de aplicación, necesita buenas prácticas de ingeniería para garantizar su mantenibilidad. A medida que crece la escala de la infraestructura, el código IaC sin metodología se convierte en otra forma de "deuda técnica".

交互演示 ── IaC 最佳实践
📂
实践一:基础设施代码纳入版本控制
像管理应用代码一样管理基础设施代码
✅ 推荐做法
所有 .tf 文件提交到 Git 仓库
使用分支策略(main / dev / feature)
通过 Pull Request 进行代码审查
在 CI 中自动运行 terraform plan
❌ 反面模式
在本地执行 apply 后不提交代码
直接在 main 分支上修改
将 .tfstate 文件提交到 Git
跳过 Code Review 直接部署
.gitignore 示例
# 忽略本地状态文件
*.tfstate
*.tfstate.backup
.terraform/

# 忽略敏感变量文件
*.tfvars
!example.tfvars
实践成熟度
入门
基础
进阶
成熟
卓越

Las seis mejores prácticas principales

  1. Modularización: abstraer la infraestructura reutilizable en módulos (como módulo VPC, módulo de base de datos), evitando copiar y pegar. Como escribir funciones: definir una vez, llamar múltiples veces.
  2. Aislamiento de entornos: desarrollo, pruebas y producción usan archivos de estado y variables independientes, aislados mediante workspaces o estructura de directorios.
  3. Gestión de estado remoto: almacenar el archivo de estado (tfstate) en un backend remoto (S3 + DynamoDB), soportando colaboración en equipo y bloqueo de estado, evitando conflictos de concurrencia.
  4. Gestión de información sensible: contraseñas, claves y otra información sensible no debe escribirse en el código; usar Vault, AWS Secrets Manager y otras herramientas.
  5. Integración CI/CD: integrar terraform plan en el proceso de PR, y ejecutar apply automáticamente a través del pipeline, eliminando operaciones manuales locales.
  6. Revisión de código: los cambios de infraestructura necesitan Code Review igual que el código de aplicación, especialmente los cambios que involucran grupos de seguridad y políticas IAM.

Resumen

La Infraestructura como Código es la piedra angular de las operaciones cloud-native modernas. Transforma "operaciones manuales indescriptibles" en "código controlable por versiones", llevando la gestión de infraestructura de ser un "arte" a ser una "ingeniería".

Repaso de los puntos clave de este capítulo:

  1. La esencia de IaC: declarar en código el estado deseado de la infraestructura, dejar que las herramientas lo implementen automáticamente
  2. Flujo de trabajo de Terraform: tres pasos Write → Plan → Apply, Plan es la red de seguridad
  3. Selección de herramientas: multi-nube elige Terraform, nube única elige herramientas nativas, equipos de desarrolladores eligen Pulumi
  4. Deriva de configuración: el riesgo más insidioso, necesita protección doble mediante procesos y herramientas
  5. Gestión ingenieril: modularización, aislamiento de entornos, estado remoto, integración CI/CD — todo indispensable

Lecturas complementarias