Partilhar via


Variáveis no bíceps

Este artigo descreve como definir e usar variáveis no arquivo Bicep. Você usa variáveis para simplificar o desenvolvimento do arquivo Bicep. Em vez de repetir expressões complicadas em todo o arquivo Bicep, você define uma variável que contém a expressão complicada. Em seguida, você usa essa variável conforme necessário em todo o arquivo Bicep.

O Resource Manager resolve variáveis antes de iniciar as operações de implantação. Sempre que a variável é usada no arquivo Bicep, o Gerenciador de Recursos a substitui pelo valor resolvido. Você está limitado a 512 variáveis em um arquivo Bicep. Para obter mais informações, consulte 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 para cada variável. Para obter mais informações, consulte Usar decoradores.

Variáveis não tipadas

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

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

O exemplo a seguir 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 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 suporta variáveis digitadas, onde você declara explicitamente o tipo de dados de uma variável para garantir a segurança do tipo e melhorar a clareza do código. Os benefícios das variáveis digitadas:

  • Deteção de erros: O compilador Bicep valida se os valores atribuídos correspondem ao tipo declarado, detetando erros antecipadamente.
  • Clareza do código: tipos explícitos deixam claro que tipo de dados uma variável retém.
  • Suporte ao Intellisense: Ferramentas como o Visual Studio Code fornecem melhor preenchimento automático e validação para variáveis digitadas.
  • Refatoração de segurança: Assegura que alterações às atribuições variáveis não quebram inadvertidamente as expectativas do tipo.

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

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

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

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 variáveis digitadas 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

Você pode 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 valores:

[
  {
    "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 você pode usar com variáveis, consulte Loops iterativos no Bicep.

Use decoradores

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

Decorador Argumento Descrição
descrição cadeia (de caracteres) Forneça descrições para a variável.
exportação nenhum Indica que a variável está disponível para importação por outro arquivo Bicep.

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

Descrição

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

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

O texto formatado com marcação pode ser usado para o texto de descrição.

Exportar

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

Variáveis de configuração

Você pode definir variáveis que contê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 que contém valores para dois ambientes - test e prod. Passe 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óximos passos