Partilhar via


Parâmetros no Bicep

Este artigo descreve como definir e usar parâmetros em um arquivo Bicep. Ao fornecer valores diferentes para parâmetros, você pode reutilizar um arquivo Bicep para ambientes diferentes.

O Azure Resource Manager resolve valores de parâmetro antes de iniciar as operações de implantação. Onde quer que o parâmetro seja usado, o Resource Manager o substitui pelo valor resolvido.

Cada parâmetro deve ser definido como um dos tipos de dados.

Bicep permite um máximo de 256 parâmetros. Para obter mais informações, consulte Limites de modelo.

Para obter as práticas recomendadas de parâmetros, consulte Parâmetros.

Definir parâmetros

Cada parâmetro tem um nome e um tipo de dados. Opcionalmente, você pode fornecer um valor padrão para o parâmetro.

@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>

Um parâmetro não pode ter o mesmo nome que uma variável, recurso, saída ou outro parâmetro no mesmo escopo.

O exemplo a seguir mostra declarações básicas de parâmetros.

param demoString string
param demoInt int
param demoBool bool
param demoObject object
param demoArray array

A param palavra-chave também é usada em .bicepparam arquivos. Você não precisa especificar o tipo de dados nos arquivos .bicepparam, já que o tipo de dados é definido nos arquivos Bicep.

param <parameter-name> = <value>

As expressões de tipo definidas pelo usuário podem ser usadas como a cláusula de tipo de uma param instrução. Por exemplo:

param storageAccountConfig {
  name: string
  sku: string
}

Para obter mais informações, consulte Tipos de dados definidos pelo usuário no Bicep.

Definir valores padrão

Você pode especificar um valor padrão para um parâmetro. O valor padrão é usado quando um valor não é fornecido durante a implantação.

param demoParam string = 'Contoso'

Você pode usar expressões com o valor padrão. As expressões não são permitidas com outras propriedades de parâmetro. Você não pode usar a reference função ou qualquer uma das funções na seção de list parâmetros. Essas funções obtêm o estado de tempo de execução do recurso e não podem ser executadas antes da implantação quando os parâmetros são resolvidos.

param location string = resourceGroup().location

Você pode usar outro valor de parâmetro para criar um valor padrão. O modelo a seguir constrói um nome de plano de host a partir do nome do site.

param siteName string = 'site${uniqueString(resourceGroup().id)}'
param hostingPlanName string = '${siteName}-plan'

output siteNameOutput string = siteName
output hostingPlanOutput string = hostingPlanName

No entanto, não é possível fazer referência a uma variável como o valor padrão.

Use decoradores

Os parâmetros usam decoradores para restrições ou metadados. Os decoradores estão no formato @expression e são colocados acima da declaração do parâmetro. A tabela a seguir mostra os decoradores disponíveis para parâmetros:

Decorador Candidatar-se a Argumento Descrição
permitido todos matriz Use este decorador para se certificar de que o usuário fornece valores corretos. Este decorador só é permitido em param declarações. Para declarar que uma propriedade deve ser um de um conjunto de valores predefinidos numa type declaração ou output, use a sintaxe de tipo união. A sintaxe do tipo união também pode ser usada em param declarações.
descrição todos cadeia (de caracteres) Texto que explica como usar o parâmetro. A descrição é exibida para os usuários no portal do Azure.
discriminador objecto cadeia (de caracteres) Use este decorador para garantir que a subclasse correta seja identificada e gerenciada. Para obter mais informações, consulte Tipo de dados de união com marcação personalizada.
comprimento máximo matriz, cadeia de caracteres Int O comprimento máximo para parâmetros de string e matriz. O valor é inclusivo.
maxValor Int Int O valor máximo para o parâmetro inteiro. Este valor é inclusivo.
metadados todos objecto Propriedades personalizadas a serem aplicadas ao parâmetro. Pode incluir uma propriedade description equivalente ao decorador de descrição.
minComprimento matriz, cadeia de caracteres Int O comprimento mínimo para parâmetros de cadeia e matriz. O valor é inclusivo.
minValor Int Int O valor mínimo para o parâmetro inteiro. Este valor é inclusivo.
selado objecto nenhuma Eleve o BCP089 de um aviso a um erro quando o nome de propriedade de um tipo de dados definido pelo uso for provavelmente um erro de digitação. Para obter mais informações, consulte Aumentar o nível de erro.
seguro string, objeto nenhuma Marca o parâmetro como seguro. O valor de um parâmetro seguro não é salvo no histórico de implantação e não é registrado. Para obter mais informações, consulte Proteger cadeias de caracteres e objetos.

Os decoradores estão no namespace do 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 um parâmetro chamado description, você deve adicionar o namespace sys ao usar o decorador de descrição .

@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string

Valores permitidos

Você pode definir valores permitidos para um parâmetro. Você fornece os valores permitidos em uma matriz. A implantação falhará durante a validação se um valor for passado para o parâmetro que não é um dos valores permitidos.

@allowed([
  'one'
  'two'
])
param demoEnum string

Se você definir valores permitidos para um parâmetro de matriz, o valor real poderá ser qualquer subconjunto dos valores permitidos.

Descrição

Para ajudar os usuários a entender o valor a ser fornecido, adicione uma descrição ao parâmetro. Quando um usuário implanta o modelo por meio do portal do Azure, o texto da descrição é usado automaticamente como uma dica para esse parâmetro. Adicione apenas uma descrição quando o texto fornecer mais informações do que pode ser inferido a partir do nome do parâmetro.

@description('Must be at least Standard_A3 to support 2 NICs.')
param virtualMachineSize string = 'Standard_DS1_v2'

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

@description('''
Storage account name restrictions:
- Storage account names must be between 3 and 24 characters in length and can only contain numbers and lowercase letters.
- Your storage account name must be unique within Azure. No two storage accounts can have the same name.
''')
@minLength(3)
@maxLength(24)
param storageAccountName string

Quando você passa o cursor sobre storageAccountName no Visual Studio Code, você vê o texto formatado:

Usar texto formatado com Markdown no VS Code

Certifique-se de que o texto segue a formatação de Markdown adequada; caso contrário, ele pode não ser exibido corretamente quando renderizado.

Discriminador

Consulte Tipo de dados de união com marcação personalizada.

Restrições de números inteiros

Você pode definir valores mínimos e máximos para parâmetros inteiros. Você pode definir uma ou ambas as restrições.

@minValue(1)
@maxValue(12)
param month int

Restrições de comprimento

Você pode especificar comprimentos mínimos e máximos para parâmetros de cadeia de caracteres e matriz. Você pode definir uma ou ambas as restrições. Para cadeias de caracteres, o comprimento indica o número de caracteres. Para matrizes, o comprimento indica o número de itens na matriz.

O exemplo a seguir declara dois parâmetros. Um parâmetro é para um nome de conta de armazenamento que deve ter de 3 a 24 caracteres. O outro parâmetro é uma matriz que deve ter de 1 a 5 itens.

@minLength(3)
@maxLength(24)
param storageAccountName string

@minLength(1)
@maxLength(5)
param appNames array

Metadados

Se você tiver propriedades personalizadas que deseja aplicar a um parâmetro, adicione um decorador de metadados. Dentro dos metadados, defina um objeto com os nomes e valores personalizados. O objeto definido para os metadados pode conter propriedades de qualquer nome e tipo.

Você pode usar esse decorador para rastrear informações sobre o parâmetro que não faz sentido adicionar à descrição.

@description('Configuration values that are applied when the application starts.')
@metadata({
  source: 'database'
  contact: 'Web team'
})
param settings object

Quando você fornece a um @metadata() decorador uma propriedade que entra em conflito com outro decorador, esse decorador sempre tem precedência sobre qualquer coisa no @metadata() decorador, de modo que a propriedade conflitante dentro do @metadata() valor é redundante e será substituída. Para obter mais informações, consulte Regra de Linter - sem metadados conflitantes.

Selado

Consulte Elevar nível de erro.

Parâmetros seguros

Você pode marcar parâmetros de cadeia de caracteres ou objeto como seguros. Quando um parâmetro é decorado com @secure(), o Azure Resource Manager trata o valor do parâmetro como confidencial, impedindo que ele seja registrado ou exibido no histórico de implantação, no Portal do Azure ou nas saídas de linha de comando.

@secure()
param demoPassword string

@secure()
param demoSecretObject object

Existem várias regras linter relacionadas com este decorador: Parâmetro seguro padrão, Parâmetros seguros em implementações aninhadas, Segredos seguros em parâmetros.

Parâmetros de uso

Para fazer referência ao valor de um parâmetro, use o nome do parâmetro. O exemplo a seguir usa um valor de parâmetro para um nome de cofre de chaves.

param vaultName string = 'keyVault${uniqueString(resourceGroup().id)}'

resource keyvault 'Microsoft.KeyVault/vaults@2025-05-01' = {
  name: vaultName
  ...
}

O @secure() decorador é válido apenas para parâmetros do tipo string ou objeto, pois estes se alinham com os tipos secureString e secureObject em modelos ARM. Para passar matrizes ou números com segurança, envolva-os em um secureObject ou serialize-os como um secureString.

Usar objetos como parâmetros

Pode ser mais fácil organizar valores relacionados passando-os como um objeto. Essa abordagem também reduz o número de parâmetros no modelo.

O exemplo a seguir mostra um parâmetro que é um objeto. O valor padrão mostra as propriedades esperadas para o objeto. Essas propriedades são usadas ao definir o recurso a ser implantado.

param vNetSettings object = {
  name: 'VNet1'
  location: 'eastus'
  addressPrefixes: [
    {
      name: 'firstPrefix'
      addressPrefix: '10.0.0.0/22'
    }
  ]
  subnets: [
    {
      name: 'firstSubnet'
      addressPrefix: '10.0.0.0/24'
    }
    {
      name: 'secondSubnet'
      addressPrefix: '10.0.1.0/24'
    }
  ]
}

resource vnet 'Microsoft.Network/virtualNetworks@2025-01-01' = {
  name: vNetSettings.name
  location: vNetSettings.location
  properties: {
    addressSpace: {
      addressPrefixes: [
        vNetSettings.addressPrefixes[0].addressPrefix
      ]
    }
    subnets: [
      {
        name: vNetSettings.subnets[0].name
        properties: {
          addressPrefix: vNetSettings.subnets[0].addressPrefix
        }
      }
      {
        name: vNetSettings.subnets[1].name
        properties: {
          addressPrefix: vNetSettings.subnets[1].addressPrefix
        }
      }
    ]
  }
}

Próximos passos