Compartilhar via


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 512 variáveis em um arquivo Bicep. Para obter mais informações, confira Limites de modelo.

Definir variáveis

Uma variável não pode ter o mesmo nome que um parâmetro, módulo ou recurso. Você pode adicionar um ou mais decoradores a cada variável. Para obter mais informações, confira Usar decoradores.

Variáveis não tipados

Quando você define uma variável sem especificar um tipo de dados, o tipo é inferido do valor. A sintaxe para definir uma variável não tipada é:

@<decorator>(<argument>)
var <variable-name> = <variable-value>

Este exemplo define uma variável como uma cadeia de caracteres.

var stringVar = 'preset variable'

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

A saída do 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 semelhante ao seguinte resultado:

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

Variáveis tipadas

Começando com a CLI do Bicep versão 0.36.X, o Bicep dá suporte a variáveis tipadas, nas quais você declara explicitamente o tipo de dado de uma variável para garantir a segurança de tipos e melhorar a clareza do código. Os benefícios das variáveis tipadas:

  • Detecção de erros: o compilador Bicep valida que os valores atribuídos correspondem ao tipo declarado, capturando erros antecipadamente.
  • Clareza de código: tipos explícitos deixam claro que tipo de dados uma variável contém.
  • Suporte ao Intellisense: ferramentas como o Visual Studio Code fornecem melhor preenchimento automático e validação para variáveis tipadas.
  • Segurança de refatoração: garante que as alterações nas atribuições de variáveis não interrompam inadvertidamente as expectativas do tipo.

Para definir uma variável tipada, use a var palavra-chave seguida pelo nome da variável, pelo tipo e pelo valor atribuído:

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

Os exemplos a seguir mostram como definir variáveis tipadas:

var resourceName string = 'myResource'
var instanceCount int = 3
var isProduction bool = true
var tags object = { environment: 'dev' }
var subnets array = ['subnet1', 'subnet2']

Para object tipos, você pode definir um esquema para impor uma estrutura específica. O compilador garante que o objeto adere ao esquema definido.

var config {
  name: string
  count: int
  enabled: bool
} = {
  name: 'myApp'
  count: 5
  enabled: true
}

O exemplo a seguir usa as variáveis tipadas com decoradores para impor restrições.

@description('The environment to deploy to')
@allowed(['dev', 'test', 'prod'])
param environment string = 'dev'

var instanceCount int = environment == 'prod' ? 5 : 2
var resourcePrefix string = 'app'
var tags {
  environment: string
  deployedBy: string 
} = {
  environment: environment
  deployedBy: 'Bicep'
}

resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: '${resourcePrefix}storage${instanceCount}'
  location: 'westus'
  tags: tags
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

Neste exemplo:

  • instanceCount é digitado como int e usa uma expressão condicional.
  • resourcePrefix é digitado como string.
  • tags é digitado como object com uma estrutura específica.

Usar loops iterativos

É 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 decoradores

Decoradores são escritos no formato @expression e inseridos acima de declarações de variável. A tabela a seguir mostra os decoradores disponíveis para variáveis.

Decorador Argumento Descrição
descrição cadeia Fornecer descrições para a variável.
export none Indica que a variável está disponível para importação por outro arquivo Bicep.

Os decoradores estão no namespace sys. Se você precisar diferenciar um decorador de outro item com o mesmo nome, preceda o decorador com sys. Por exemplo, se o arquivo Bicep incluir uma variável denominada description, você deverá adicionar o namespace sys ao usar o decorador de descrição.

Descrição

Para adicionar uma explicação, adicione uma descrição à declaração da variável. Por exemplo:

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

O texto formatado em Markdown pode ser usado para o texto da descrição.

Exportação

Use @export() para compartilhar a variável com outros arquivos Bicep. Para obter mais informações, confira Exportar variáveis, tipos e funções.

Variáveis de configuração

Você pode definir variáveis que mantêm valores relacionados para configurar um ambiente. Você define a variável como um objeto com os valores. O exemplo a seguir mostra um objeto contendo valores para dois ambientes - test e prod. Transmita 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