MAISON CODE .
/ DevOps · Terraform · AWS · IaC

Infraestructura como código: Terraform vs Pulumi

Hacer clic en los botones de la consola de AWS es una deuda técnica. Cómo administrar su infraestructura Headless usando código, archivos de estado y Git.

AB
Alex B.
Infraestructura como código: Terraform vs Pulumi

Configura su depósito de AWS S3 manualmente. Habilitó CORS manualmente. Seis meses después, es necesario lanzar un entorno de prueba. ¿Puedes recordar exactamente qué casillas marcaste? No. Infraestructura como código (IaC) resuelve este problema. Definimos nuestros servidores, bases de datos y registros DNS en archivos de texto. Los comprometemos con Git. Los aplicamos de manera determinista.

Por qué Maison Code habla de esto

En Maison Code Paris, actuamos como la conciencia arquitectónica de nuestros clientes. A menudo heredamos stacks “modernos” construidos sin una comprensión fundamental de la escala.

Discutimos este tema porque representa un punto de inflexión crítico en la madurez de la ingeniería. Implementarlo correctamente diferencia un MVP frágil de una plataforma resistente de nivel empresarial.

El modelo declarativo (Terraform)

Terraform es el estándar de la industria. Utiliza HCL (lenguaje de configuración de HashiCorp). Usted describe el Estado final. Terraform descubre cómo llegar allí.

# principal.tf
proveedor "aws" {
  región = "nosotros-este-1"
}

recurso "aws_s3_bucket" "activos" {
  cubo = "maison-code-assets-prod"
  acl = "lectura pública"

  regla_cors {
    encabezados_permitidos = ["*"]
    métodos_permitidos = ["OBTENER"]
    orígenes_permitidos = ["https://maisoncode.paris"]
  }
}

La ejecución de “terraform apply” crea el depósito. Si cambio allowed_methods a ["GET", "HEAD"] y ejecuto apply nuevamente, Terraform actualiza la API del depósito. Permite CI/CD para infraestructura.

El modelo imperativo (Pulumi)

Terraform es genial, pero HCL es un lenguaje dedicado. Pulumi te permite escribir infraestructura en TypeScript. Esto le brinda bucles, funciones y una lógica distinta.

// index.ts
importar * como aws desde "@pulumi/aws";

depósito constante = nuevo aws.s3.Bucket("activos", {
    acl: "lectura pública",
    corsRules: [{
        encabezados permitidos: ["*"],
        métodos permitidos: ["OBTENER"],
        orígenes permitidos: ["https://maisoncode.paris"],
    }],
});

exportar const nombrededepósito = depósito.id;

Estado de gestión

Las herramientas de IaC almacenan el “Estado” del mundo en un archivo (terraform.tfstate). Este archivo asigna su código al mundo real (el ID de recurso de AWS). Peligro: Nunca almacene el estado localmente. Si su computadora portátil se estropea, pierde el acceso a la infraestructura. Almacene el estado en un backend remoto (S3 Bucket con bloqueo o Terraform Cloud).

Detección de deriva

La “deriva” ocurre cuando un desarrollador junior inicia sesión en la consola de AWS y elimina manualmente una regla de firewall para “corregir un error”. El código dice que el firewall está activado. La realidad dice que el firewall está desactivado. Ejecutamos un trabajo cron diario de “plan de terraformación”. Si detecta cambios (Drift), nos avisa en Slack. “Advertencia: Se detectó desviación de infraestructura en el grupo de seguridad sg-123”.

Infraestructura inmutable

En los viejos tiempos, usábamos SSH en los servidores para actualizar PHP. En el mundo de IaC, tratamos a los servidores como Ganado, no como Mascotas. Para actualizar la aplicación, destruimos el servidor antiguo y activamos uno nuevo con la nueva imagen. Esto garantiza que no se acumulen “derivaciones de configuración” ni artefactos ocultos a lo largo de los años.

Estrategia multinube

Shopify está en Google Cloud. Sus imágenes están en AWS S3. Tus funciones de Edge están en Cloudflare. IaC los gestiona todos en un solo archivo. Puede pasar la salida de uno (URL de AWS CloudFront) como entrada a otro (Registro DNS de Cloudflare).

9. Gestión secreta: sin contraseñas en Git

Debe pasar la contraseña de la base de datos a la función Lambda. NUNCA escríbalo en main.tf. NUNCA confirme .env. Solución: AWS Secrets Manager + fuentes de datos de Terraform.

  1. Cree un secreto en la consola de AWS (o mediante CLI).
  2. Terraform hace referencia a él: data.aws_secretsmanager_secret_version.db_pass.secret_string.
  3. Terraform lo inyecta como una variable de entorno en Lambda en el momento de la implementación. El secreto existe sólo en la RAM durante la implementación. Nunca toca el disco.

10. Política como Código (Sentinel / OPA)

¿Cómo se puede evitar que un desarrollador junior genere una instancia de GPU de €5000 al mes? Política como Código. Usamos Open Policy Agent (OPA) para escanear el Plan Terraform antes de aplicarlo. denegar si el tipo_instancia no está en ["t3.micro", "t3.small"]. Si el código infringe la política, la canalización de CI falla. Se trata de “barandillas, no guardianes”.

11. Infraestructura de implementación azul-verde

IaC nos permite activar un Entorno duplicado.

  1. Live es “verde” (v1).
  2. Terraform hace girar “Azul” (v2).
  3. Realizamos pruebas E2E en Blue.
  4. Terraform actualiza el equilibrador de carga (ALB) para que apunte a azul.
  5. Si se activan alertas, Terraform revierte el ALB a verde instantáneamente.
  6. Una vez estable, Terraform destruye a Green. Esto proporciona Seguridad que las implementaciones manuales nunca pueden ofrecer.

12. Rotación de credenciales de base de datos

El cumplimiento dice “Rotar las contraseñas cada 30 días”. Los humanos odian esto. A Terraform le encanta. Configuramos aws_secretsmanager_secret_rotation. Hace girar una Lambda que:

  1. Inicie sesión en RDS.
  2. Cree el usuario B.
  3. Actualizar secreto.
  4. Actualizar la aplicación.
  5. Eliminar usuario A. Cero tiempo de inactividad. Cero implicación humana.

14. Recuperación ante desastres (DR) como código

¿Qué pasa si “us-east-1” cae? (Sucede). Con IaC, DR es un guión. terraforma aplicar -var="region=us-west-2". En 15 minutos, toda tu infraestructura (Load Balancers, EC2, Bases de datos) se replica al otro lado del país. Verificamos esto trimestralmente ejecutando “Días de juego”. Verificamos que podemos poner en marcha la pila desde cero en una cuenta de AWS vacía. Si hace clic en los botones de la consola, la DR es imposible. Estarás deprimido durante días. Con IaC, estarás inactivo durante minutos.

15. ¿Por qué Código Maison?

En Maison Code, creemos que Infraestructura es Producto. No contratamos “administradores de sistemas”. Contratamos Ingenieros DevOps. Construimos una infraestructura inmutable, de autocuración y de autocuración. Le entregamos las claves (el Git Repo), no una caja negra. Capacitamos a su equipo para que implemente 10 veces al día sin temor a romper la red. Porque la velocidad requiere seguridad.

16. Conclusión

La infraestructura como código es la diferencia entre un “Proyecto Hobby” y una “Plataforma Empresarial”. Convierte “Ops” en ingeniería de software. Le brinda auditabilidad, velocidad y seguridad. Deja de hacer clic en los botones estándar. Empiece a escribir código.


¿Estás cansado de la configuración manual del servidor?

Migramos la infraestructura manual a tuberías Terraform/Pulumi robustas y auditables. Contrate a nuestros arquitectos.