Argumentos Meta en Terraform
count Crear recursos similares
for_each Crear recusros similares
depends_on Definir dependencias
provider Opciones de proveedor
lifecycle Comportamiento de ciclo de vida
| Argumento |
Ámbito |
Notas |
| count |
recurso, módulo |
Crea múltiples recursos similares usando count.index como referencia |
| for_each |
recurso, módulo |
Acepta set(string) o map(string) |
| depends_on |
recurso, módulo |
Gestiona dependencias no inferidas automáticamente |
| provider |
recurso, módulo |
Especifica proveedores personalizados |
| lifecycle |
recurso, módulo |
Controla comportameinto de ciclo de vida |
Crear réplicas con count
# versión.tf
terraform {
required_version = ">=1.2.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.25.0"
}
}
}
# Configurar proveedor
provider "aws" {
region = "us-east-1"
access_key = "clave_acceso"
secret_key = "clave_secreta"
}
# recursos.tf
locals {
dominios = ["servidor1", "servidor2", "servidor3"]
}
resource "aws_route53_record" "registro" {
count = length(local.dominios)
zone_id = "Z123456789"
name = "${local.dominios[count.index]}.dominioejemplo.com"
type = "A"
ttl = 300
records = ["192.168.1.10"]
}
Crear réplicas con for_each
locals {
dominios = toset(["servidor1", "servidor3"])
}
resource "aws_route53_record" "registro_each" {
for_each = local.dominios
zone_id = "Z123456789"
name = "${each.value}.dominioejemplo.com"
type = "A"
ttl = 300
records = ["192.168.1.10"]
}
Bloques dinámicos
locals {
reglas_seguridad = [
{ puerto = 8080, protocolo = "tcp" },
{ puerto = 443, protocolo = "tcp" }
]
}
resource "aws_security_group" "ejemplo" {
name = "grupo-seguridad"
dynamic "ingress" {
for_each = local.reglas_seguridad
content {
from_port = ingress.value.puerto
to_port = ingress.value.puerto
protocol = ingress.value.protocolo
cidr_blocks = ["0.0.0.0/0"]
}
}
}
Gestionar dependencias
resource "aws_s3_bucket" "almacenamiento" {
bucket = "bucket-ejemplo"
}
resource "aws_s3_bucket_object" "archivo" {
bucket = aws_s3_bucket.almacenamiento.bucket
key = "archivo.txt"
source = "ruta/archivo.txt"
depends_on = [aws_s3_bucket.almacenamiento]
}
Proveedores personalizados
provider "aws" {
alias = "europa"
region = "eu-west-1"
}
resource "aws_instance" "servidor_eu" {
provider = aws.europa
ami = "ami-123456"
instance_type = "t2.micro"
}
Configuración de ciclo de vida
resource "aws_db_instance" "basedatos" {
engine = "mysql"
instance_class = "db.t2.micro"
lifecycle {
prevent_destroy = true
ignore_changes = [engine_version]
}
}