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:
- uso de índice de enteros
- uso de elementos de matriz
- uso de matriz e índice
- uso de objeto de diccionario
- uso de bucle con condición
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:
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 recibirá dos cuentas de almacenamiento:
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:
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 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 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.
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