Compartir a través de


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 512 variables en un archivo de Bicep. Para obtener más información, consulte Límites de plantilla.

Definición de variables

La sintaxis para definir una variable es:

@<decorator>(<argument>)
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 decoradores

Los decoradores se escriben en el formato @expression y se colocan encima de las declaraciones de variable. En la siguiente tabla se muestran los decoradores disponibles para las variables.

Decorador Argumento Descripción
descripción string Proporcione descripciones para la variable.
export None Indica que la variable está disponible para la importación por otro archivo de Bicep.

Los decoradores están en el espacio de nombres sys. Si tiene que diferenciar un decorador de otro elemento con el mismo nombre, anteceda el decorador con sys. Por ejemplo, si el archivo de Bicep incluye una variable llamada description, debe agregar el espacio de nombres sys al usar el decorador description.

Descripción

Para agregar una explicación, agregue una descripción a las declaraciones de variables. Por ejemplo:

@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)

El texto con formato Markdown se puede usar para el texto de descripción.

Exportación

Use @export() para compartir la variable con otros archivos de Bicep. Para más información, consulte Exportación de variables, tipos y funciones.

Uso de variables

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@2023-04-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