Estructura de Archivos Terraform y Sintaxis HCL

Lectura
20 min~4 min lectura

Concepto clave

La estructura de archivos en Terraform y la sintaxis HCL (HashiCorp Configuration Language) son el esqueleto de tu infraestructura como codigo. Imagina que estás construyendo una casa: los archivos Terraform son los planos arquitectonicos, y HCL es el lenguaje en el que escribes esos planos. Sin una estructura clara, terminas con un caos de archivos que nadie puede mantener.

HCL es un lenguaje declarativo diseñado especificamente para configuraciones. A diferencia de lenguajes de programacion tradicionales, no describes como hacer algo, sino que quieres que exista. Por ejemplo, en lugar de escribir pasos para crear una instancia EC2, declaras: "quiero una instancia EC2 con estas caracteristicas". Terraform se encarga del resto.

Como funciona en la practica

Cuando trabajas con Terraform en AWS, sigues un flujo estructurado. Primero, defines tu proveedor (AWS) y configuras la autenticacion. Luego, organizas tu codigo en archivos logicos. Un proyecto tipico incluye:

  1. main.tf: Contiene los recursos principales como instancias EC2, VPCs, o buckets S3.
  2. variables.tf: Define variables que parametrizan tu infraestructura.
  3. outputs.tf: Especifica que valores exponer despues del despliegue.
  4. terraform.tfvars: Asigna valores a las variables definidas.

Para comenzar, creas un directorio para tu proyecto y dentro, el archivo main.tf con la configuracion basica del proveedor AWS. Luego, ejecutas terraform init para inicializar el proyecto, lo que descarga el proveedor y configura el backend.

Codigo en accion

A continuacion, un ejemplo funcional de una estructura basica para desplegar una instancia EC2 en AWS:

# provider.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "us-east-1"
}
# main.tf
resource "aws_instance" "web_server" {
  ami           = "ami-0c55b159cbfafe1f0"  # Amazon Linux 2 AMI
  instance_type = "t2.micro"

  tags = {
    Name = "WebServerExample"
  }
}

Antes de refactorizar, podrias tener todo en un solo archivo. Despues, separas en provider.tf y main.tf para mejorar la mantenibilidad.

Errores comunes

  • No usar variables para valores repetitivos: Si tienes la misma region en multiples recursos, crea una variable en variables.tf para evitar inconsistencias.
  • Olvidar terraform init al clonar un proyecto: Sin inicializar, Terraform no puede trabajar con los proveedores necesarios.
  • Mala indentacion en HCL: HCL es sensible a la estructura; una indentacion incorrecta puede causar errores de sintaxis.
  • No validar con terraform validate: Siempre valida tu codigo antes de aplicar para detectar errores temprano.
  • Hardcodear credenciales en los archivos: Usa variables de entorno o AWS CLI config para credenciales, nunca las escribas directamente en el codigo.

Checklist de dominio

  • Puedo explicar la diferencia entre HCL y un lenguaje de programacion imperativo.
  • He creado una estructura basica de archivos Terraform con al menos tres archivos separados.
  • Se como usar terraform init, terraform plan, y terraform apply en secuencia.
  • Puedo identificar y corregir un error de sintaxis comun en HCL, como falta de llaves.
  • He refactorizado codigo para mover valores hardcodeados a variables.
  • Se como configurar el proveedor AWS con autenticacion segura.
  • Puedo leer un archivo Terraform existente y entender que recursos declara.

Crear y desplegar una estructura basica de VPC en AWS con Terraform

En este ejercicio, practicaras la estructura de archivos Terraform y sintaxis HCL para desplegar una VPC (Virtual Private Cloud) en AWS. Sigue estos pasos:

  1. Crea un nuevo directorio llamado terraform-vpc-practice en tu maquina local.
  2. Dentro del directorio, crea los siguientes archivos: provider.tf, main.tf, variables.tf, y terraform.tfvars.
  3. En provider.tf, configura el proveedor AWS para usar la region us-east-1.
  4. En variables.tf, define una variable llamada vpc_cidr con tipo string y una descripcion.
  5. En terraform.tfvars, asigna el valor "10.0.0.0/16" a la variable vpc_cidr.
  6. En main.tf, usa la variable vpc_cidr para crear un recurso aws_vpc con un tag Name "MiVPCDePractica".
  7. Ejecuta terraform init para inicializar el proyecto.
  8. Ejecuta terraform plan para revisar los cambios.
  9. Si el plan es correcto, ejecuta terraform apply y confirma con yes para desplegar la VPC.
  10. Verifica en la consola de AWS que la VPC se ha creado correctamente.
Pistas
  • Recuerda que en HCL, los bloques de recursos usan llaves {} y cada argumento debe estar indentado.
  • Puedes usar el comando terraform validate despues de escribir cada archivo para verificar la sintaxis.
  • Si tienes problemas con la autenticacion, asegurate de tener configuradas las credenciales de AWS CLI o variables de entorno.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.