Creación básica de recursos con Terraform

LinuxBeginner
Practicar Ahora

Introducción

Terraform es una herramienta de código abierto de Infraestructura como Código (IaC) creada por HashiCorp. Te permite definir y aprovisionar la infraestructura de un centro de datos utilizando un lenguaje de configuración declarativo. Esto significa que describes la infraestructura deseada en archivos de configuración, y Terraform se encarga de determinar cómo crear, actualizar o eliminar los recursos para que coincidan con ese estado.

El flujo de trabajo central de Terraform consta de tres etapas principales:

  1. Write (Escribir): Redactar la infraestructura como código.
  2. Plan (Planificar): Previsualizar los cambios antes de aplicarlos.
  3. Apply (Aplicar): Aprovisionar y gestionar tu infraestructura.

En este laboratorio, recorrerás todo este flujo de trabajo creando un recurso muy sencillo: un archivo local. Utilizar el proveedor local es una excelente manera de aprender la mecánica de Terraform sin necesidad de credenciales para un proveedor de nube. Definirás un archivo, planificarás su creación, aplicarás los cambios y verificarás el resultado.

Definir un recurso local_file en main.tf

En este paso, comenzarás definiendo un recurso en tu archivo de configuración de Terraform. Todas las configuraciones de Terraform se escriben en archivos que terminan con la extensión .tf. El archivo de configuración principal se suele llamar main.tf.

Un bloque resource es la sintaxis principal para declarar un objeto de infraestructura. Define un recurso de un tipo determinado (por ejemplo, local_file) con un nombre local específico (por ejemplo, example). La combinación del tipo y el nombre debe ser única dentro de un módulo.

Primero, abre el archivo main.tf en tu directorio ~/project utilizando el editor de texto nano.

nano main.tf

Ahora, añade el siguiente código al archivo. Esto define un recurso de tipo local_file y le asigna el nombre local example. Por ahora, el bloque de recursos está vacío.

resource "local_file" "example" {
}

Después de añadir el código, guarda el archivo y sal de nano presionando Ctrl+X, luego Y, y finalmente Enter.

Especificar el nombre del archivo y el contenido en el bloque de recursos

En este paso, añadirás argumentos al bloque de recursos para especificar las propiedades del archivo que deseas crear. Los argumentos son los pares clave-valor dentro de un bloque de recursos que definen su configuración. Para un recurso local_file, los dos argumentos más importantes son filename y content.

  • filename: La ruta del archivo que se creará.
  • content: El contenido que se escribirá en el archivo.

Abre el archivo main.tf de nuevo con nano.

nano main.tf

Modifica el bloque de recursos local_file para incluir los argumentos filename y content como se muestra a continuación.

resource "local_file" "example" {
  content  = "Hello, Terraform!"
  filename = "${path.module}/hello.txt"
}

Aquí, le estamos indicando a Terraform que cree un archivo llamado hello.txt en el directorio actual del proyecto. ${path.module} es una expresión especial de Terraform que se resuelve en la ruta del módulo actual, que en este caso es ~/project. El contenido del archivo será la cadena "Hello, Terraform!".

Guarda el archivo y sal de nano presionando Ctrl+X, Y, y Enter.

Inicializar Terraform y previsualizar los cambios

En este paso, primero inicializarás tu proyecto de Terraform y luego ejecutarás el comando terraform plan para crear un plan de ejecución.

Antes de poder planificar cualquier cambio, debes inicializar el proyecto. El comando terraform init escanea tu configuración, descarga los proveedores necesarios (en este caso, para local_file) y configura el backend.

En tu terminal, ejecuta primero terraform init:

terraform init

Una vez que la inicialización sea exitosa, ejecuta terraform plan. Este comando es una parte crucial del flujo de trabajo de Terraform, ya que proporciona una "simulación" de los cambios. Te muestra lo que Terraform hará en tu infraestructura sin realizar cambios reales. Esto te permite revisar y verificar las acciones previstas antes de aplicarlas.

terraform plan

Terraform leerá tu archivo de configuración y lo comparará con el estado actual de tu infraestructura (que actualmente está vacía). Luego, mostrará un plan de acción. Deberías ver una salida similar a la siguiente, indicando que se va a crear un recurso.

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.example will be created
  + resource "local_file" "example" {
      + content              = "Hello, Terraform!"
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./hello.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

El símbolo + junto a resource "local_file" "example" significa que este recurso será creado. La salida detalla todos los atributos que se establecerán en el nuevo archivo.

Ejecutar terraform apply para crear el recurso

En este paso, aplicarás los cambios utilizando el comando terraform apply para crear el archivo realmente. Este comando ejecuta las acciones propuestas en la salida de terraform plan.

De forma predeterminada, terraform apply te mostrará el plan nuevamente y solicitará una confirmación interactiva antes de continuar. Para hacerlo no interactivo, lo cual es útil para laboratorios y automatización, puedes usar la bandera -auto-approve.

Ejecuta el siguiente comando en tu terminal:

terraform apply -auto-approve

Terraform ejecutará ahora el plan. La salida mostrará primero el plan de nuevo, seguido del progreso de la aplicación. Una vez completado, verás un mensaje de confirmación.

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.example will be created
  + resource "local_file" "example" {
      + content              = "Hello, Terraform!"
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./hello.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.
local_file.example: Creating...
local_file.example: Creation complete after 0s [id=42086c02e03bf671ddf621ed9922f52f2c7a605c]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

El mensaje "Apply complete!" confirma que Terraform ha creado con éxito el recurso tal como se definió en tu configuración.

Verificar que el archivo creado existe en el sistema de archivos

En este paso final, verificarás que Terraform ha creado con éxito el archivo en tu sistema de archivos local tal como se especificó. Dado que utilizaste el recurso local_file, el resultado es un archivo tangible en el directorio de tu proyecto.

Primero, utiliza el comando ls para listar los archivos en el directorio actual. Ahora deberías ver hello.txt junto a tu archivo de configuración de Terraform.

ls

Salida esperada:

hello.txt  main.tf  terraform.tfstate

A continuación, utiliza el comando cat para mostrar el contenido del archivo hello.txt recién creado.

cat hello.txt

Deberías ver el contenido que definiste en main.tf.

Hello, Terraform!

Esto confirma que tu configuración de Terraform se aplicó correctamente y el recurso se creó exactamente como lo definiste en tu código.

Resumen

¡Felicidades! Has completado con éxito tu primer proyecto de Terraform.

En este laboratorio, aprendiste el flujo de trabajo fundamental de Terraform:

  1. Write (Escribir): Definiste un recurso local_file en un archivo de configuración main.tf.
  2. Plan (Planificar): Utilizaste terraform plan para previsualizar la creación del archivo sin realizar cambios.
  3. Apply (Aplicar): Utilizaste terraform apply para ejecutar el plan y crear el archivo en tu sistema de archivos local.

Este sencillo ejemplo de creación de un archivo local demuestra el poder central de la Infraestructura como Código. Declaraste el estado deseado de un recurso en un archivo de configuración, y Terraform manejó la lógica para alcanzar ese estado. Los mismos principios se aplican al gestionar infraestructuras más complejas, como máquinas virtuales, redes y bases de datos en la nube.