Variables de Bicep

En este artículo se describe cómo definir y usar variables en el archivo de Bicep. Las variables se usan para simplificar el desarrollo de archivos de Bicep. En lugar de repetir expresiones complicadas en todo el archivo de Bicep, defina una variable que contenga la expresión complicada. A continuación, use esa variable en todo el archivo de Bicep tanto como sea necesario.

Resource Manager resuelve las variables antes de iniciar las operaciones de implementación. Siempre que la variable se use en el archivo de Bicep, Resource Manager la reemplaza por el valor resuelto.

Está limitado a 256 variables en un archivo Bicep. Para obtener más información, consulte Límites de plantilla.

Definición de la variable

La sintaxis para definir una variable es:

var <variable-name> = <variable-value>

Una variable no puede tener el mismo nombre que un parámetro, módulo o recurso.

Al definir una variable, no se especifica un tipo de datos para ella. El tipo se deduce del valor. En el siguiente ejemplo se establece una variable en una cadena.

var stringVar = 'example value'

Puede usar el valor de un parámetro u otra variable al construir la variable.

param inputValue string = 'deployment parameter'

var stringVar = 'preset variable'
var concatToVar =  '${stringVar}AddToVar'
var concatToParam = '${inputValue}AddToParam'

output addToVar string = concatToVar
output addToParam string = concatToParam

El ejemplo anterior devuelve:

{
  "addToParam": {
    "type": "String",
    "value": "deployment parameterAddToParam"
  },
  "addToVar": {
    "type": "String",
    "value": "preset variableAddToVar"
  }
}

Puede usar las funciones de Bicep para construir el valor de la variable. En el ejemplo siguiente se usan funciones de Bicep para crear un valor de cadena para un nombre de cuenta de almacenamiento.

param storageNamePrefix string = 'stg'
var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

output uniqueStorageName string = storageName

En el ejemplo anterior se devuelve un valor como el siguiente:

"uniqueStorageName": {
  "type": "String",
  "value": "stghzuunrvapn6sw"
}

Puede usar bucles iterativos al definir una variable. En el ejemplo siguiente se crea una matriz de objetos con tres propiedades.

param itemCount int = 3

var objectArray = [for i in range(0, itemCount): {
  name: 'myDataDisk${(i + 1)}'
  diskSizeGB: '1'
  diskIndex: i
}]

output arrayResult array = objectArray

La salida devuelve una matriz con los valores siguientes:

[
  {
    "name": "myDataDisk1",
    "diskSizeGB": "1",
    "diskIndex": 0
  },
  {
    "name": "myDataDisk2",
    "diskSizeGB": "1",
    "diskIndex": 1
  },
  {
    "name": "myDataDisk3",
    "diskSizeGB": "1",
    "diskIndex": 2
  }
]

Para más información sobre los tipos de bucles que puede usar con variables, consulte Bucles iterativos en Bicep.

Uso de la variable

En el ejemplo siguiente se muestra cómo usar la variable para una propiedad de recurso. Se hace referencia al valor de la variable al proporcionar el nombre de la variable: storageName.

param rgLocation string
param storageNamePrefix string = 'STG'

var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

resource demoAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: storageName
  location: rgLocation
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output stgOutput string = storageName

Dado que los nombres de cuenta de almacenamiento deben usar letras minúsculas, la variable storageName usa la función toLower para convertir el valor storageNamePrefix en minúsculas. La función uniqueString crea un valor único a partir del identificador del grupo de recursos. Los valores se concatenan a una cadena.

Variables de configuración

Puede definir variables que contengan valores relacionados para configurar un entorno. La variable se define como un objeto con los valores. En el ejemplo siguiente se muestra un objeto que contiene valores para dos entornos: test y prod. Pase uno de estos valores durante la implementación.

@allowed([
  'test'
  'prod'
])
param environmentName string

var environmentSettings = {
  test: {
    instanceSize: 'Small'
    instanceCount: 1
  }
  prod: {
    instanceSize: 'Large'
    instanceCount: 4
  }
}

output instanceSize string = environmentSettings[environmentName].instanceSize
output instanceCount int = environmentSettings[environmentName].instanceCount

Pasos siguientes