Variáveis no Bicep

Este artigo descreve como definir e usar variáveis no seu arquivo Bicep. Você usa variáveis para simplificar o desenvolvimento de arquivos Bicep. Em vez de repetir expressões complicadas em todo o arquivo Bicep, defina uma variável que contenha a expressão complicada. Em seguida, use essa variável conforme necessário em todo o arquivo Bicep.

O Resource Manager resolverá as variáveis antes de iniciar as operações de implantação. Sempre que a variável é usada no arquivo Bicep, o Resource Manager a substitui pelo valor resolvido.

Você está limitado a 256 variáveis em um arquivo Bicep. Para obter mais informações, confira Limites de modelo.

Definir variável

A sintaxe para definir uma variável é:

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

Uma variável não pode ter o mesmo nome que um parâmetro, módulo ou recurso.

Observe que não é necessário especificar um tipo de dados na variável. O tipo é inferido pelo valor. O exemplo a seguir define uma variável como uma cadeia de caracteres.

var stringVar = 'example value'

Você pode usar o valor de um parâmetro ou outra variável ao construir a variável.

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

O exemplo anterior retorna:

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

Você pode usar funções do Bicep para construir o valor da variável. O exemplo a seguir usa funções Bicep para criar um valor de cadeia de caracteres para um nome de conta de armazenamento.

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

output uniqueStorageName string = storageName

O exemplo anterior retorna um valor como o seguinte:

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

É possível usar loops iterativos ao definir uma variável. O exemplo a seguir cria uma matriz de objetos com três propriedades.

param itemCount int = 3

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

output arrayResult array = objectArray

A saída retorna uma matriz com os seguintes elementos:

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

Para obter mais informações sobre os tipos de loops que podem ser usados com variáveis, consulte Loops iterativos em Bicep.

Usar uma variável

O exemplo a seguir mostra como usar a variável para uma propriedade de recurso. Você faz referência ao valor da variável fornecendo o nome da variável: 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

Como os nomes de conta de armazenamento devem usar letras minúsculas, a variável storageName usa a função toLower para tornar o valor storageNamePrefix em minúsculas. A função uniqueString cria um valor exclusivo da ID do grupo de recursos. Os valores são concatenados a uma cadeia de caracteres.

Variáveis de configuração

Você pode definir variáveis que mantêm valores relacionados para configurar um ambiente. Defina a variável como um objeto com os valores. O exemplo a seguir mostra um objeto que contém valores para dois ambientes - test e prod. Passe em um desses valores durante a implantação.

@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

Próximas etapas