Automatizar la construcción y operación de entornos cloud es el punto fuerte de Terraform. En este artículo organizamos los conceptos fundamentales y el uso de Terraform y profundizamos en uno de los puntos que más confusión genera: la diferencia entre variable y locals. Explicamos esta diferencia comparándola con el scope en JavaScript y con ejemplos concretos en AWS para que puedas visualizar su uso en entornos reales.

Por qué usar Terraform. Tradicionalmente, construir infraestructura en AWS de forma manual desde la consola o la CLI genera problemas comunes. Errores humanos por operaciones manuales. Falta de reproducibilidad al reconstruir entornos para recuperación ante desastres o despliegues nuevos. Silos de conocimiento cuando los procedimientos están solo en la cabeza de alguien. Limitaciones al escalar: no es viable administrar manualmente infraestructuras grandes. Gestión de cambios opaca: difícil rastrear quién hizo qué y cuándo. La solución es Infrastructure as Code IaC, definir la infraestructura como código para lograr reproducibilidad, automatización y trazabilidad. Terraform es una de las herramientas más usadas para esto.

Características clave de Terraform. Soporte multi cloud: no solo AWS, Azure y GCP, también Kubernetes, GitHub y muchos proveedores más. Sintaxis declarativa: se declara lo que se quiere y Terraform resuelve dependencias. Gestión de estado: mantiene el estado en terraform.tfstate para dejar claras las diferencias entre código y realidad. Modularización: encapsula configuraciones comunes como módulos reutilizables.

Bloques básicos. provider Configura el proveedor cloud o servicio que se usará como región y credenciales. resource Define recursos de infraestructura como EC2 S3 VPC. data Referencia recursos existentes. variable Punto de entrada para valores externos. locals Define valores reutilizables dentro del código. module Colección reutilizable de recursos. output Expone valores hacia el exterior como una IP pública de EC2.

Diferencias clave entre variable y locals. variable es la entrada para valores externos. Puede recibir valores desde flags CLI, variables de entorno o archivos tfvars. Se usa para manejar diferencias entre entornos como region, env o tipo de instancia. locals son valores para reutilizar dentro del código. No pueden ser sobrescritos externamente. Mejoran la legibilidad al centralizar etiquetas comunes o reglas de nombres.

Ejemplo en AWS. variables.tf variable region { description = AWS region type = string default = ap-northeast-1 } variable env { description = Environment name type = string default = dev } locals.tf locals { common_tags = { Project = sample-app Environment = var.env } } s3.tf provider aws { region = var.region } resource aws_s3_bucket this { bucket = var.env-app-bucket tags = local.common_tags } En este ejemplo region y env pueden cambiarse externamente mientras common_tags es un valor interno reutilizado entre recursos.

Diferencia con el scope en lenguajes como JavaScript o Python. En JavaScript o Python una variable definida dentro de una función no se puede referenciar fuera de ella. En Terraform locals pueden referenciarse entre archivos que pertenezcan al mismo módulo, es decir siguen scope de módulo y no de archivo.

Referenciar dentro de un módulo. locals.tf locals { prefix = demo } ec2.tf resource aws_instance this { ami = ami-123456 instance_type = t2.micro tags = { Name = local.prefix-server } } Aunque los archivos estén separados, pertenecen al mismo módulo por lo que local.prefix está disponible en todo el módulo.

Referenciar entre módulos. No puedes acceder directamente a locals de otro módulo. En ese caso debes exponer valores a través de outputs. modules/network/locals.tf locals { vpc_cidr = 10.0.0.0/16 } modules/network/output.tf output vpc_cidr { value = local.vpc_cidr } main.tf module network { source = ./modules/network } resource aws_subnet this { cidr_block = module.network.vpc_cidr } Recuerda que locals tienen alcance de módulo no de archivo, y para cruzar módulos necesitas outputs.

Comandos esenciales. terraform init Inicializa el proyecto y descarga plugins. terraform plan Muestra un preview de cambios antes de aplicar. terraform apply Aplica los cambios y crea la infraestructura. terraform destroy Destruye recursos gestionados. terraform fmt Formatea el código. terraform validate Valida la sintaxis. terraform output Muestra valores de salida. terraform state Inspecciona y gestiona el archivo de estado.

Estructura ejemplo de proyecto con módulos. environments dev main.tf prod main.tf modules nginx main.tf variables.tf locals.tf environments dev y prod capturan diferencias específicas por entorno mientras modules nginx encapsula la lógica común.

Buenas prácticas. Gestionar los archivos de estado de forma remota por ejemplo S3 con bloqueo en DynamoDB o con Terraform Cloud. Fijar versiones de proveedores y de Terraform. Dividir módulos por responsabilidad para mayor claridad. Centralizar reglas de nombres y etiquetas con locals. Automatizar terraform fmt validate y plan en CI CD.

Terraform y tu empresa. En Q2BSTUDIO somos especialistas en desarrollo de software y aplicaciones a medida, e integramos IaC y servicios cloud para ofrecer despliegues repetibles y seguros. Si necesitas soporte para migraciones o gestión de infraestructuras en la nube ofrecemos servicios cloud AWS y Azure y acompañamiento en automatización y despliegue continuo. Conecta tus proyectos a soluciones de software a medida con nuestro equipo en desarrollo de aplicaciones y software a medida y optimiza tu infraestructura con servicios cloud AWS y Azure.

Servicios complementarios. Además de infraestructura como código, Q2BSTUDIO ofrece inteligencia artificial para empresas, agentes IA, servicios de inteligencia de negocio y soluciones como Power BI para visualización y reporting. También cubrimos ciberseguridad y pentesting para asegurar tus despliegues y procesos. Al combinar software a medida aplicaciones a medida y servicios cloud obtienes proyectos escalables y seguros con capacidades de IA y analítica integradas.

Resumen final. Terraform es una herramienta potente para gestionar infraestructura como código. variable es la puerta de entrada para valores externos mientras locals centraliza valores internos compartidos. El scope en Terraform es a nivel de módulo: locals son accesibles entre archivos del mismo módulo pero para cruzar módulos hay que usar outputs. A diferencia del scope de función en JavaScript, los locals de Terraform facilitan la reutilización entre archivos del mismo módulo y favorecen la limpieza y consistencia del código de infraestructura.