Перейти к содержимому

Escribí Terraform en Go: todo lo que hace cabe en una resta

Golandia

0:00 / 0:00

Escribí Terraform en Go: todo lo que hace cabe en una resta

571 просмотр · 7 дней назад
Golandia
4,68 тыс. подписчиков
571 просмотр · 7 дней назад
Respuesta rápida: todo lo que hace Terraform cabe en `plan = deseado − actual`. Lo que quieres, menos lo que hay. Es lo mismo que hace un controlador de Kubernetes y lo mismo que hace cualquier cosa que se llame declarativa. El lenguaje propio, los proveedores, el grafo y el estado remoto son envoltorio alrededor de esa resta — envoltorio muy valioso, pero envoltorio. Lo escribí en Go para comprobarlo: la función que calcula el plan son 53 líneas, y la herramienta entera 597. La herramienta se llama `planito` y corre contra `nubecita`, la nube de mentira que escribí en los tres vídeos anteriores. O sea que la demo entera es gratis y se destruye sola. Lo que verás: · La resta, entera y en pantalla: recorres lo que quieres y creas lo que falta; recorres lo que hay y borras lo que sobra. · 🥇 LA PIEZA QUE CASI NADIE EXPLICA: el fichero de estado. Sin él, «lo que sobra» incluye lo que creó OTRA persona. Se demuestra en la demo: alguien crea un bucket a mano, se lanza `destruir`, y ese bucket SOBREVIVE porque no está en el estado. · Y el otro lado de esa moneda: si pierdes el estado, la herramienta no borra nada — se olvida. Los recursos quedan huérfanos, pagando. De ahí sale todo lo que Terraform llama estado remoto y bloqueo. · El plan NO toca la red: recibe tres estructuras y devuelve una cuarta. Por eso las 11 pruebas (16 casos) corren en milisegundos, sin contenedores ni credenciales. Si tu lógica de negocio necesita levantar algo para probarse, casi siempre es que le has metido la red dentro. · 🥇 Cambiar la clave de una tabla de DynamoDB no es modificar: es borrar y recrear, o sea PERDER LOS DATOS. La herramienta lo dice con todas las letras en el plan, con el mismo símbolo `~` que usa Terraform. · El estado se escribe de forma ATÓMICA (temporal + renombrado) y DESPUÉS DE CADA PASO, no al final. Guardar al final es más cómodo y deja recursos huérfanos si el proceso muere a mitad. · El orden importa: al crear, la cola de mensajes muertos antes que la cola que la nombra. Al destruir, al revés. · Idempotencia: aplicar dos veces no hace nada la segunda. Es la propiedad que define a una herramienta declarativa y la que más fácil se rompe sin enterarte. · Sin `-si` no hace nada. Por qué una herramienta que toca infraestructura pide confirmación. · ⛔ Y lo que NO es: sin HCL, sin módulos, sin variables, sin proveedores conectables, sin grafo de dependencias de verdad, sin estado remoto ni bloqueo, y sin modificación en sitio. Preguntas relacionadas: · ¿Qué hace realmente Terraform? Compara lo que declaraste con lo que existe y propone la diferencia. Todo lo demás es infraestructura alrededor de esa comparación. · ¿Para qué sirve el fichero de estado (terraform.tfstate)? Para saber qué creó la herramienta. Es lo único que autoriza a borrar: sin él, no puede distinguir lo tuyo de lo de otro equipo. · ¿Qué pasa si pierdo el estado? La herramienta se olvida de lo que creó. No lo borra: lo deja huérfano. · ¿Por qué Terraform recrea algunos recursos en vez de modificarlos? Porque hay propiedades que el proveedor no deja cambiar — como la clave de una tabla de DynamoDB. Recrear significa perder los datos, y por eso el plan lo marca. Entorno citable: golang:1.26 (en Docker), aws-cli 2.36.5, aws-sdk-go-v2 para s3, dynamodb y sqs. Todo corre en contenedor porque el Application Control de esta máquina bloquea a ratos los binarios recién compilados — y de regalo, ahí sí hay detector de carreras. Capítulos: 00:00 Todo lo que hace cabe en una resta 00:53 El fichero: solo dices qué quieres 01:59 La resta, y por qué no toca la red 03:07 🥇 El fichero de estado, la pieza que falta 04:22 Cómo se guarda: atómico y tras cada paso 05:02 La demo: plan, aplicar, y el plan vacío 06:20 La escena: alguien crea algo a mano 08:00 Cambiar la clave es perder los datos 08:42 Lo que vio la nube 08:54 Lo que esto no es 09:30 Está restando #Go #Golang #Terraform #DevOps #IaC