Infraestructura como código: describir en vez de hacer
La infraestructura como código (en inglés, infrastructure as code) consiste en describir en archivos los servidores y los servicios que necesitas. En lugar de crearlos a mano, los describes. Así puedes repetirlos, revisarlos y volver atrás igual que con un programa.
Una biblioteca universitaria quiere la misma sala de estudio en tres campus. Hacerla tres veces a mano da tres salas un poco distintas. Un archivo da tres salas iguales.
Al final de esta lección
Nota
Puedo ejecutar un plan, aplicarlo y decir para qué sirve el archivo de estado.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| OpenTofu | la herramienta que lee tus archivos y crea lo que describen | |
| Recurso | una cosa que el archivo describe | terraform_data |
| Plan | la lista de cambios, mostrada antes de hacerlos | tofu plan |
| Apply | hacer los cambios que el plan listó | tofu apply |
| Estado | el archivo donde OpenTofu anota lo que ya creó | terraform.tfstate |
| Proveedor | un complemento que habla con una nube real |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un archivo dice cómo debe quedar todo
En OpenTofu no escribes los pasos. Escribes el estado deseado: qué recursos quieres y con qué valores. La herramienta decide qué hacer para llegar ahí.
OpenTofu es la herramienta de código abierto derivada de Terraform. En este laboratorio no hay nube: usarás terraform_data, un recurso incorporado que guarda un valor. Todo lo demás es real: el plan, el apply y el estado funcionan igual con una nube de verdad.
Crea una carpeta de trabajo
mkdir -p ~/bibliotecaSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Entra en ella
cd ~/bibliotecaSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el archivo main.tf
printf 'resource "terraform_data" "sala" {\n input = "sala de lectura"\n}\n' > main.tfSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee lo que escribiste
cat main.tfSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cada parte del archivo tiene su papel
| Texto del archivo | Qué es | Qué significa |
|---|---|---|
| resource | Palabra reservada | Aquí empieza la descripción de una cosa |
| "terraform_data" | El tipo | Un recurso incorporado que guarda un valor |
| "sala" | El nombre | Cómo lo llamas tú; su dirección será terraform_data.sala |
| input = "sala de lectura" | Un argumento | El valor que el recurso guarda |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El plan muestra los cambios antes de hacerlos
tofu init prepara la carpeta. Un proyecto real descarga aquí sus proveedores; este no tiene ninguno, así que acaba enseguida y dice que se inicializó con éxito.
tofu plan compara el archivo con el estado e imprime qué haría. Un + significa crear. La última línea lo suma: Plan: 1 to add, 0 to change, 0 to destroy. Un plan nunca cambia nada.
Prepara la carpeta
tofu init -no-colorSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide el plan
tofu plan -no-colorSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Apply hace los cambios, el estado los recuerda
tofu apply hace lo que el plan listó. Sin -auto-approve te pide escribir yes antes; el botón lo añade por ti. Acaba con Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
El recurso queda anotado en el estado, un archivo de texto llamado terraform.tfstate. Las tres órdenes siguientes lo muestran: la lista de recursos y el valor guardado.
Aplica el plan
tofu apply -auto-approve -no-colorSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lista lo que el estado recuerda
tofu state listSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee el valor guardado en el estado
jq -r '.resources[0].instances[0].attributes.input.value' terraform.tfstateSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que el archivo de estado es una copia del archivo .tf. No lo es. El .tf dice lo que quieres; el estado dice lo que OpenTofu ya creó. El plan compara los dos. Si borras el estado, OpenTofu cree que no ha creado nada.
Un archivo igual da un plan vacío
Ejecuta el plan otra vez justo después del apply. El estado ya tiene lo que el archivo describe, y dice No changes.
Ahora cambia el texto del archivo con sed, que busca y reemplaza. El plan distingue entre algo nuevo y algo cambiado: un ~ marca un cambio en el sitio. Las dos últimas órdenes filtran el plan para dejar solo tres líneas.
Pide otro plan
tofu plan -no-colorSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cambia el valor en el archivo
sed -i 's/sala de lectura/sala de estudio/' main.tfSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Filtra el plan
tofu plan -no-color | grep -E "^Plan|will be|input"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Qué hace el plan con cada recurso
| En el archivo | En el estado | Acción del plan |
|---|---|---|
| Está, con el mismo valor | Está | Nada |
| Está, con otro valor | Está | update (~) |
| Está | No está | create (+) |
| No está | Está | destroy (-) |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Para ir más lejos
Cuando acabes, entra en ~/biblioteca y escribe un segundo recurso terraform_data con otro nombre. Antes de aplicar, di en voz alta qué dirá la última línea del plan.
Después abre el README del laboratorio con cat ~/README.md: su primera parte trabaja la carpeta hello, y las siguientes te piden un proyecto propio.