Compartir vía


Inicio rápido: Creación de varias instancias de recursos en Bicep

Descripción del uso de diferentes sintaxis for para crear varias instancias de recursos en Bicep Aunque este artículo solo muestra la creación de varias instancias de recursos, se pueden usar los mismos métodos para definir copias de módulo, variable, propiedad o salida. Para más información, consulte Bucles de Bicep.

Ese artículo contiene los siguientes temas:

Prerrequisitos

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

A fin de configurar el entorno para el desarrollo de Bicep, consulte Instalación de las herramientas de Bicep. Después de completar esos pasos, tendrá Visual Studio Code y la extensión de Bicep. También tendrá la versión más reciente de la CLI de Azure o la versión más reciente del módulo de Azure PowerShell.

Crear una sola instancia

En esta sección, defina un archivo Bicep para crear una cuenta de almacenamiento y, después, implemente el archivo Bicep. Las secciones siguientes proporcionan las muestras de Bicep para distintas sintaxis for. Puede usar el mismo método de implementación para implementar y experimentar esas muestras. Si se produce un error en la implementación, es probable que sea una de las dos causas:

  • El nombre de la cuenta de almacenamiento es demasiado largo. Los nombres de las cuentas de almacenamiento deben tener entre 3 y 24 caracteres, y solo pueden incluir números y letras en minúscula.
  • El nombre de la cuenta de almacenamiento no es único. El nombre de la cuenta de almacenamiento debe ser único dentro de Azure.

El siguiente archivo Bicep define una cuenta de almacenamiento:

param rgLocation string = resourceGroup().location

resource createStorage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

Guarde el archivo Bicep localmente y, a continuación, use la CLI de Azure o Azure PowerShell para implementar el archivo Bicep:

resourceGroupName = "{provide-a-resource-group-name}"
templateFile="{provide-the-path-to-the-bicep-file}"

az group create --name $resourceGroupName --location eastus

az deployment group create --resource-group $resourceGroupName --template-file $templateFile

Uso de índice de enteros

En la muestra siguiente se usa un bucle for con un índice para crear dos cuentas de almacenamiento:

param rgLocation string = resourceGroup().location
param storageCount int = 2

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

output names array = [for i in range(0,storageCount) : {
  name: createStorages[i].name
} ]

El número de índice se usa como parte del nombre de la cuenta de almacenamiento. Después de implementar el archivo Bicep, obtiene dos cuentas de almacenamiento similares a:

Uso del índice de enteros que empieza por 0.

Dentro de range(), el primer número es el número inicial y el segundo número es el número de veces que se ejecutará el bucle. Por lo tanto, si lo cambia a range(3,2), también obtiene dos cuentas de almacenamiento:

Uso del índice de enteros que empieza por 3.

La salida de la muestra anterior muestra cómo hacer referencia a los recursos creados en un bucle. La salida es parecida a esta:

"outputs": {
  "names": {
    "type": "Array",
    "value": [
      {
        "name": "0storage52iyjssggmvue"
      },
      {
        "name": "1storage52iyjssggmvue"
      }
    ]
  }
},

Uso de elementos de matriz

Puede recorrer una matriz en bucle. En la muestra siguiente se muestra una matriz de cadenas.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for name in storageNames: {
  name: '${name}str${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

El bucle usa todas las cadenas de la matriz como parte de los nombres de la cuenta de almacenamiento. En este caso, crea dos cuentas de almacenamiento:

Uso de una matriz de cadenas.

También puede recorrer en bucle una matriz de objetos. El bucle no solo personaliza los nombres de la cuenta de almacenamiento, sino que también configura las SKU.

param rgLocation string = resourceGroup().location
param storages array = [
  {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for storage in storages: {
  name: '${storage.name}obj${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: storage.skuName
  }
  kind: 'StorageV2'
}]

El bucle crea dos cuentas de almacenamiento. La SKU de la cuenta de almacenamiento con el nombre empezando por fabrikames Premium_LRS.

Uso de una matriz de cadenas.

Uso de matriz e índice

En los mismos casos, es posible que desee combinar un bucle de matriz con un bucle de índice. En la muestra siguiente se muestra cómo usar la matriz y el número de índice de la convención de nomenclatura.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for (name, i) in storageNames: {
  name: '${i}${name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

Después de implementar la muestra anterior, cree dos cuentas de almacenamiento similares a:

Uso de una matriz de cadenas y un número de índice.

Uso de objeto de diccionario

Para recorrer en iteración los elementos de un objeto de diccionario, use la función items, que convierte el objeto en una matriz. Utilice la propiedad value para obtener propiedades de los objetos.

param rgLocation string = resourceGroup().location

param storageConfig object = {
  storage1: {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  storage2: {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
}

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for config in items(storageConfig): {
  name: '${config.value.name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: config.value.skuName
  }
  kind: 'StorageV2'
}]

El bucle crea dos cuentas de almacenamiento. La SKU de la cuenta de almacenamiento con el nombre empezando por fabrikames Premium_LRS.

Uso de un objeto de biblioteca.

Bucle con condición

En el caso de los recursos y módulos, puede agregar una expresión if con la sintaxis de bucle para implementar condicionalmente la colección.

param rgLocation string = resourceGroup().location
param storageCount int = 2
param createNewStorage bool = true

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

Para obtener más información, consulte Implementación condicional en Bicep.

Limpieza de recursos

Cuando los recursos de Azure dejen de ser necesarios, use la CLI de Azure o el módulo de Azure PowerShell para eliminar el grupo de recursos y el recurso del servidor del inicio rápido.

resourceGroupName = "{provide-the-resource-group-name}"

az group delete --name $resourceGroupName

Pasos siguientes