Uso de bucles con `for_each` y `count`
Aprenda a aprovisionar varias instancias de un recurso o módulo mediante `count` y `for_each` para gestionar colecciones y mapas de forma eficiente.
Uso de bucles con `for_each` y `count` es una lección gratuita de DevOps Bootcamp en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de DevOps Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de DevOps Bootcamp incluye 4 lecciones en total.
Introducción a los bucles
Al gestionar infraestructura con Terraform, a menudo es necesario crear varios recursos similares. Imagine que necesita 10 servidores web o 5 instancias de base de datos. Repetir el mismo bloque de código una y otra vez sería tedioso y propenso a errores.
En esta lección se presentan dos funciones potentes de Terraform: count y for_each. Le ayudan a aprovisionar varios recursos de forma eficiente y a mantener configuraciones limpias y escalables.
¿Por qué usar `count` y `for_each`?
El uso de bucles como count y for_each ofrece ventajas importantes:
- Menos duplicación: Escriba el código de infraestructura una vez y reutilícelo.
- Mayor legibilidad: Sus configuraciones serán mucho más limpias y fáciles de entender.
- Escalabilidad: Ajuste fácilmente el número de recursos cambiando un único valor o una colección.
- Coherencia: Garantice que todos los recursos similares estén configurados de forma idéntica.
`count` para repeticiones sencillas
El metaargumento count es perfecto cuando necesita crear varias instancias casi idénticas de un recurso o módulo. Proporcione un valor entero y Terraform creará esa cantidad de instancias.
Cada instancia creada mediante count tendrá un índice, desde 0 hasta count - 1. Puede acceder a este índice mediante count.index.
Ejemplo: varias instancias EC2 con `count`
Vamos a aprovisionar tres instancias EC2 idénticas de AWS. Observe cómo se utiliza count.index para asignar un nombre único a cada servidor.
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "web_server" {
count = 3
ami = "ami-053b0dcd10dcf2f56" # Ubuntu Server 20.04 LTS
instance_type = "t2.micro"
tags = {
Name = "WebServer-${count.index}"
}
}Comprender `count.index`
En el ejemplo anterior, ${count.index} se resolvió automáticamente como 0, 1 y 2 para cada instancia. Esto permite crear identificadores únicos o ajustar las propiedades de cada instancia.
Sin count.index, los tres servidores tendrían exactamente la misma etiqueta «Name», lo que podría causar confusión o problemas en AWS.
Introducción a `for_each`
Mientras que count es excelente para repeticiones sencillas, for_each ofrece mayor flexibilidad. Itera sobre un conjunto de cadenas o un mapa de cadenas y crea una instancia por cada elemento.
for_each es ideal cuando necesita gestionar recursos con configuraciones distintas o cuando el número de recursos viene determinado por una colección no numérica (por ejemplo, una lista de nombres de entornos o un mapa de configuraciones de usuario).
Ejemplo: `for_each` con un conjunto
Aquí creamos tres buckets de S3, cada uno con el nombre de un elemento de nuestro conjunto de for_each. Usamos each.value para acceder al elemento actual de la iteración.
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "app_buckets" {
for_each = toset(["prod-app-data", "dev-app-logs", "test-app-assets"])
bucket = each.value
acl = "private"
tags = {
Environment = split("-", each.value)[0]
}
}Ejemplo: `for_each` con un mapa
El uso de un mapa permite definir configuraciones más complejas y únicas para cada recurso. Aquí creamos buckets de S3 con distintas opciones de versionado según las claves de entorno.
Puede acceder a la clave mediante each.key y al valor mediante each.value.
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "configured_bucket" {
for_each = {
production = { name = "prod-data-bucket", versioning = true }
development = { name = "dev-logs-bucket", versioning = false }
}
bucket = each.value.name
acl = "private"
versioning {
enabled = each.value.versioning
}
tags = {
Environment = each.key
}
}`count` frente a `for_each`: elija correctamente
¿Cuándo debe usar cada uno?
- Use
count: Para iteraciones numéricas sencillas y para crear recursos idénticos cuando la cantidad es lo más importante. Es adecuado cuando solo necesita un índice para diferenciarlos. - Use
for_each: Para iterar sobre colecciones complejas (conjuntos o mapas), cuando los recursos necesitan identificadores únicos o propiedades derivadas de los elementos de la colección. Generalmente se prefiere cuando cada instancia tiene un identificador lógico claro y único.
Comprobación rápida: bucles
Considere un escenario en el que necesita crear un bucket de S3 para cada equipo de su organización y cada bucket debe tener una política de retención específica definida por ese equipo.
Resumen: creación eficiente de recursos
¡Buen trabajo! Ha aprendido a aprovechar count y for_each para crear configuraciones de Terraform más dinámicas y eficientes.
countsirve para repetir de forma sencilla y numérica recursos idénticos, utilizandocount.indexpara diferenciarlos.for_eachsirve para iterar sobre conjuntos o mapas y crear recursos distintos con propiedades únicas medianteeach.keyyeach.value.
Estas construcciones son fundamentales para gestionar infraestructura como código escalable y fácil de mantener.
Preguntas frecuentes
¿La lección «Uso de bucles con `for_each` y `count`» es gratis?
Sí — el texto completo de «Uso de bucles con `for_each` y `count`» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de DevOps Bootcamp, actualiza a CoddyKit PRO. El curso de DevOps Bootcamp incluye 4 lecciones en total.
¿Qué aprenderé en «Uso de bucles con `for_each` y `count`»?
Aprenda a aprovisionar varias instancias de un recurso o módulo mediante `count` y `for_each` para gestionar colecciones y mapas de forma eficiente. Practicas DevOps Bootcamp con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar DevOps Bootcamp?
No se requiere experiencia previa. DevOps Bootcamp en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Uso de bucles con `for_each` y `count`»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de DevOps Bootcamp?
Sí. Cada lección de DevOps Bootcamp incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Uso de bucles con `for_each` y `count`
- Funciones integradas de Terraform
- Expresiones condicionales y splats
- Bloques dinámicos para configuraciones anidadas