En este tema, aprenderemos sobre las variables y salidas en Terraform, que son fundamentales para crear configuraciones reutilizables y modulares. Las variables permiten parametrizar las configuraciones, mientras que las salidas facilitan la obtención de información de los recursos creados.
Variables en Terraform
¿Qué son las Variables?
Las variables en Terraform permiten parametrizar las configuraciones, haciendo que el código sea más flexible y reutilizable. Puedes definir valores que pueden ser reutilizados en múltiples lugares dentro de tu configuración.
Tipos de Variables
Terraform soporta varios tipos de variables:
- String: Cadena de texto.
- Number: Número.
- Bool: Booleano (verdadero o falso).
- List: Lista de valores.
- Map: Mapa de pares clave-valor.
- Set: Conjunto de valores únicos.
Definición de Variables
Las variables se definen en un archivo variables.tf
o directamente en el archivo de configuración principal. Aquí hay un ejemplo de cómo definir diferentes tipos de variables:
variable "instance_type" { description = "Tipo de instancia de AWS" type = string default = "t2.micro" } variable "instance_count" { description = "Número de instancias" type = number default = 1 } variable "enable_monitoring" { description = "Habilitar monitoreo" type = bool default = true } variable "allowed_ips" { description = "Lista de IPs permitidas" type = list(string) default = ["0.0.0.0/0"] } variable "tags" { description = "Etiquetas para los recursos" type = map(string) default = { "Environment" = "dev" "Project" = "terraform-course" } }
Uso de Variables
Para usar una variable en tu configuración, utiliza la sintaxis ${var.<variable_name>}
. Aquí hay un ejemplo de cómo usar las variables definidas anteriormente:
resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = var.instance_type count = var.instance_count tags = var.tags monitoring = var.enable_monitoring network_interface { device_index = 0 associate_public_ip_address = true subnet_id = "subnet-0bb1c79de3EXAMPLE" security_groups = ["sg-903004f8"] } }
Asignación de Valores a Variables
Los valores de las variables pueden ser asignados de varias maneras:
-
Archivo
terraform.tfvars
: Puedes crear un archivoterraform.tfvars
para definir los valores de las variables.instance_type = "t2.medium" instance_count = 2 enable_monitoring = false allowed_ips = ["192.168.1.0/24"] tags = { "Environment" = "production" "Project" = "terraform-course" }
-
Línea de Comando: Puedes pasar los valores de las variables directamente desde la línea de comando.
terraform apply -var="instance_type=t2.medium" -var="instance_count=2"
-
Variables de Entorno: Puedes usar variables de entorno para definir los valores de las variables.
export TF_VAR_instance_type="t2.medium" export TF_VAR_instance_count=2
Salidas en Terraform
¿Qué son las Salidas?
Las salidas en Terraform permiten extraer información de los recursos creados y mostrarlas al final de la ejecución del plan de Terraform. Esto es útil para obtener datos como direcciones IP, nombres de recursos, etc.
Definición de Salidas
Las salidas se definen en un archivo outputs.tf
o directamente en el archivo de configuración principal. Aquí hay un ejemplo de cómo definir salidas:
output "instance_id" { description = "ID de la instancia de AWS" value = aws_instance.example.id } output "instance_public_ip" { description = "Dirección IP pública de la instancia" value = aws_instance.example.public_ip } output "instance_private_ip" { description = "Dirección IP privada de la instancia" value = aws_instance.example.private_ip }
Uso de Salidas
Las salidas se muestran al final de la ejecución del plan de Terraform. También puedes acceder a las salidas utilizando el comando terraform output
.
$ terraform output instance_id = "i-0abcd1234efgh5678" instance_public_ip = "54.123.45.67" instance_private_ip = "10.0.1.123"
Ejercicio Práctico
Ejercicio 1: Definir y Usar Variables
-
Crea un archivo
variables.tf
y define las siguientes variables:region
(string): Región de AWS.instance_type
(string): Tipo de instancia de AWS.instance_count
(number): Número de instancias.
-
Crea un archivo
main.tf
y usa las variables definidas para crear una instancia de AWS.
Solución
variables.tf
variable "region" { description = "Región de AWS" type = string default = "us-west-2" } variable "instance_type" { description = "Tipo de instancia de AWS" type = string default = "t2.micro" } variable "instance_count" { description = "Número de instancias" type = number default = 1 }
main.tf
provider "aws" { region = var.region } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = var.instance_type count = var.instance_count }
Ejercicio 2: Definir y Usar Salidas
- Crea un archivo
outputs.tf
y define las siguientes salidas:instance_id
: ID de la instancia de AWS.instance_public_ip
: Dirección IP pública de la instancia.
Solución
outputs.tf
output "instance_id" { description = "ID de la instancia de AWS" value = aws_instance.example.id } output "instance_public_ip" { description = "Dirección IP pública de la instancia" value = aws_instance.example.public_ip }
Conclusión
En esta sección, hemos aprendido sobre las variables y salidas en Terraform. Las variables nos permiten parametrizar nuestras configuraciones, haciéndolas más flexibles y reutilizables. Las salidas nos permiten extraer información útil de los recursos creados. Estos conceptos son fundamentales para crear configuraciones de Terraform eficientes y modulares. En el próximo tema, exploraremos los bloques de recursos y datos en Terraform.
Curso de Terraform
Módulo 1: Introducción a Terraform
- ¿Qué es Terraform?
- Instalando Terraform
- Conceptos Básicos de Terraform
- Primera Configuración de Terraform
Módulo 2: Lenguaje de Configuración de Terraform
Módulo 3: Gestión del Estado
Módulo 4: Módulos de Terraform
Módulo 5: Aprovisionamiento de Recursos
- Conceptos Básicos de Aprovisionamiento
- Aprovisionamiento de Recursos AWS
- Aprovisionamiento de Recursos Azure
- Aprovisionamiento de Recursos GCP
Módulo 6: Funcionalidades Avanzadas de Terraform
Módulo 7: Mejores Prácticas de Terraform
- Organización del Código
- Control de Versiones
- Pruebas del Código de Terraform
- Mejores Prácticas de Seguridad
Módulo 8: Terraform en CI/CD
- Integración de Terraform con CI/CD
- Automatización de Terraform con Jenkins
- Uso de Terraform con GitHub Actions
- Terraform Cloud y Enterprise