(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo usar bucles en Bicep para crear varios recursos

João Barros 07 de July de 2026 4 min de lectura

Crear diez cuentas de almacenamiento a mano, una a una, es lento y propenso a errores. Con bucles en Bicep declaras el recurso una sola vez y Azure crea tantas instancias como necesites a partir de una lista. Esta guía muestra, paso a paso, cómo usar el bucle for en Bicep para crear varios recursos de forma limpia y reutilizable.

Requisitos previos

  • Una suscripción de Azure activa.
  • La Azure CLI instalada, o el Cloud Shell dentro del portal de Azure.
  • La extensión Bicep en VS Code (opcional, pero ayuda al escribir).
  • Nociones básicas de Bicep: qué son los parámetros y los recursos.

Paso 1: Crear el grupo de recursos

Todos los recursos viven dentro de un grupo de recursos. Vamos a crear uno solo para esta demostración, para que luego sea fácil borrarlo todo de una vez. Abre un terminal y ejecuta:

az group create \
  --name rg-bicep-loops \
  --location westeurope

Guarda el nombre rg-bicep-loops: es a donde vamos a enviar la plantilla.

Paso 2: Crear un bucle sobre una lista

Crea un archivo llamado main.bicep. La idea central es simple: declaras un array con los datos de cada cuenta y envuelves el recurso en [for ... : { ... }]. Bicep recorre la lista y crea una cuenta por cada elemento.

param location string = resourceGroup().location

param contas array = [
  {
    nome: 'vendas'
    sku: 'Standard_LRS'
  }
  {
    nome: 'compras'
    sku: 'Standard_GRS'
  }
]

resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = [for conta in contas: {
  name: 'st${conta.nome}${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: conta.sku
  }
  kind: 'StorageV2'
}]

Fíjate en dos detalles. El for conta in contas te da, en cada vuelta, el objeto actual de la lista, y usas sus campos (conta.nome y conta.sku) para personalizar cada recurso. La función uniqueString(resourceGroup().id) genera un sufijo predecible que ayuda a mantener el nombre único a nivel global, un requisito de las cuentas de almacenamiento.

El nombre de una cuenta de almacenamiento solo acepta letras minúsculas y números y debe tener entre 3 y 24 caracteres. Como uniqueString ocupa 13 caracteres, mantén los prefijos cortos para no superar el límite.

Paso 3: Usar el índice con range()

A veces no tienes una lista de objetos: solo quieres N copias iguales. En ese caso, usa la función range() para generar una secuencia de números y toma el índice en cada vuelta. Esta es una alternativa al Paso 2:

param location string = resourceGroup().location
param numeroDeContas int = 3

resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = [for i in range(0, numeroDeContas): {
  name: 'stdemo${i}${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

El range(0, 3) produce los números 0, 1 y 2, por lo que Bicep crea tres cuentas. Como el índice i entra en el nombre, cada cuenta obtiene un nombre distinto y válido.

Paso 4: Desplegar y devolver los nombres

Con el archivo main.bicep listo, envíalo al grupo de recursos que creaste en el Paso 1:

az deployment group create \
  --resource-group rg-bicep-loops \
  --template-file main.bicep

Azure lee el bucle, lo expande en varios recursos y crea todas las cuentas en una sola operación. Volviendo a la versión del Paso 2 (lista de objetos), también puedes devolver los nombres generados añadiendo este output al final del archivo:

output nomesCriados array = [for i in range(0, length(contas)): storage[i].name]

Comprobar el resultado

Cuando termine el despliegue, confirma que las cuentas existen de verdad. En el terminal, lista las cuentas de almacenamiento del grupo de recursos:

az storage account list \
  --resource-group rg-bicep-loops \
  --output table

Deberías ver una fila por cada cuenta que creó el bucle. Como alternativa, abre el grupo de recursos en el portal de Azure y compruébalo visualmente. Para limpiarlo todo al final, borra el grupo de recursos completo con az group delete --name rg-bicep-loops.

Conclusión

Con una sola declaración de recurso y un bucle for, ahora creas varios recursos a partir de una lista, sin copiar y pegar bloques casi idénticos. A partir de aquí, prueba a combinar el bucle con una condición (if) para crear recursos solo cuando tenga sentido, o aplica el mismo patrón a módulos para escalar arquitecturas enteras. ¿Cuál será el primer recurso repetitivo que convertirás en un bucle?