Entender os parâmetros
Com os parâmetros, você pode fornecer informações para um modelo Bicep no momento da implantação. É possível tornar um modelo Bicep flexível e reutilizável declarando os parâmetros no seu modelo.
Os decoradores fornecem uma maneira de anexar restrições e metadados a um parâmetro, o que ajuda qualquer pessoa que use os modelos a entender quais informações precisam fornecer.
Nesta unidade, você aprenderá sobre parâmetros e decoradores.
Declarar um parâmetro
Em um modelo Bicep, você declara um parâmetro usando a palavra-chave param
. É possível colocar essas declarações em qualquer lugar no arquivo de modelo, embora geralmente seja uma boa ideia colocá-las na parte superior do arquivo para facilitar a leitura do código Bicep.
Veja como declarar um parâmetro:
param environmentName string
Vamos ver como cada parte funciona:
param
indica ao Bicep que você está declarando um parâmetro.environmentName
refere-se ao nome do parâmetro. Embora o nome do parâmetro possa ser qualquer um, é possível deixar o nome claro e compreensível para os usuários do modelo. No mesmo modelo, também é possível consultar o parâmetro usando seu nome. Os nomes de parâmetros devem ser exclusivos. Eles não podem ter o mesmo nome que uma variável ou um recurso no mesmo arquivo Bicep.Dica
Usar convenções de nomenclatura de práticas recomendadas para declarações de parâmetro. Nomes adequados facilitam a leitura e a compreensão dos modelos. Verifique se você está usando nomes descritivos e claros e seja consistente em sua estratégia de nomenclatura.
string
refere-se ao tipo do parâmetro.Dica
Pense cuidadosamente nos parâmetros usados pelo seu modelo. Tente usar parâmetros para configurações que mudam entre implantações. Variáveis e valores em código podem ser usados em configurações que não mudam entre implantações.
Adicionar um valor padrão
Você pode atribuir valores padrão aos parâmetros em seus modelos. Ao atribuir um valor padrão, você está tornando o parâmetro opcional. Se o modelo for implantado sem um valor especificado para o parâmetro, o valor padrão será atribuído.
Confira como adicionar um valor padrão:
param environmentName string = 'dev'
O parâmetro environmentName
é atribuído ao valor padrão de dev
.
Você pode usar expressões como valores padrão. Aqui está um exemplo de um parâmetro de cadeia de caracteres chamado location
com um valor padrão definido para a localização do grupo de recursos atual:
param location string = resourceGroup().location
Dica
Cuidado com os valores padrão que você utiliza. Garanta que será seguro para qualquer pessoa implantar o arquivo Bicep com os valores padrão. Por exemplo, considere o uso de SKUs e tipos de preços baratos para que a pessoa que implantar o modelo em um ambiente de teste não incorra em um custo grande de forma desnecessária.
Entender os tipos de parâmetros
Ao declarar um parâmetro, você precisa dizer ao Bicep quais tipos de informações o parâmetro conterá. O Bicep garantirá que o valor atribuído ao parâmetro seja compatível com o tipo de parâmetro.
Os parâmetros no Bicep podem ser um dos seguintes tipos:
string
, que permite inserir texto arbitrário.int
, que permite inserir um número.bool
, que representa um valor booliano (verdadeiro ou falso).object
earray
, que representam listas e dados estruturados.
Objetos
Você pode usar parâmetros de objeto para combinar dados estruturados juntos em um só lugar. Um objeto pode ter várias propriedades de tipos diferentes. É possível usar objetos em definições de recursos, em variáveis ou em expressões no arquivo Bicep. Aqui está um exemplo de um objeto:
param appServicePlanSku object = {
name: 'F1'
tier: 'Free'
capacity: 1
}
Esse parâmetro é um objeto com duas propriedades de cadeia de caracteres, name
e tier
, e uma propriedade de inteiro, capacity
. Observe que cada uma das propriedades está em sua própria linha.
Ao fazer referência ao parâmetro no modelo, você pode selecionar as propriedades individuais do objeto usando um ponto seguido pelo nome da propriedade, como neste exemplo:
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSku.name
tier: appServicePlanSku.tier
capacity: appServicePlanSku.capacity
}
}
Importante
Lembre-se que você não especifica o tipo de cada propriedade dentro de um objeto. No entanto, ao usar o valor de uma propriedade, seu tipo deve corresponder ao esperado. No exemplo anterior, o nome e a camada da SKU do Plano do Serviço de Aplicativo devem ser cadeias de caracteres.
Outro exemplo de utilização de um parâmetro de objeto é ao especificar marcas de recursos. Você pode anexar metadados de marca personalizada aos recursos implantados, que podem ser usados para identificar informações importantes sobre um recurso.
As marcas são úteis para cenários como acompanhar qual equipe possui um recurso ou quando um recurso pertence a um ambiente de produção ou não. Normalmente você usará marcas diferentes para cada ambiente, mas precisará reutilizar os mesmos valores de marca em todos os recursos no modelo. Por esse motivo, as marcas de recursos são um bom uso para um parâmetro de objeto, como neste exemplo:
param resourceTags object = {
EnvironmentName: 'Test'
CostCenter: '1000100'
Team: 'Human Resources'
}
Sempre que você definir um recurso no arquivo Bicep, poderá reutilizá-lo sempre que definir a propriedade tags
:
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
tags: resourceTags
sku: {
name: 'S1'
}
}
resource appServiceApp 'Microsoft.Web/sites@' = {
name: appServiceAppName
location: location
tags: resourceTags
kind: 'app'
properties: {
serverFarmId: appServicePlan.id
}
}
Matrizes
Uma matriz é uma lista de itens. Por exemplo, você pode usar uma matriz de valores de cadeia de caracteres para declarar uma lista de endereços de email para um grupo de ação do Azure Monitor. Ou você pode usar uma matriz de objetos para representar uma lista de sub-redes para uma rede virtual.
Observação
Você não pode especificar o tipo de itens individuais que uma matriz precisa conter. Por exemplo, você não pode especificar que uma matriz deve conter cadeias de caracteres.
Vamos considerar um exemplo. O Azure Cosmos DB permite que você crie contas de banco de dados que abrangem várias regiões e trata automaticamente a replicação de dados para você. Ao implantar uma nova conta de banco de dados, é necessário especificar a lista de regiões do Azure na qual você deseja que a conta seja implantada. Muitas vezes você precisará ter uma lista diferente de locais para ambientes diferentes. Por exemplo, para economizar dinheiro em seu ambiente de teste, você pode usar apenas um ou dois locais. Mas, em seu ambiente de produção, você pode usar vários locais.
É possível criar um parâmetro de matriz que especifica uma lista de locais:
param cosmosDBAccountLocations array = [
{
locationName: 'australiaeast'
}
{
locationName: 'southcentralus'
}
{
locationName: 'westeurope'
}
]
Dica
O exemplo anterior é uma matriz de objetos. Cada objeto tem uma propriedade locationName
, que é o esperado pelo Azure Cosmos DB. Ao trabalhar com uma definição de recurso no Visual Studio Code, você pode começar inserindo as propriedades do recurso para obter o IntelliSense das ferramentas do Bicep. É possível criar alguns valores de exemplo usando essa abordagem. Quando ficar satisfeito com a configuração, mova essa seção do código do Bicep para o parâmetro. Dessa forma, você pode substituir uma propriedade embutida em código por um parâmetro que pode ser alterado durante cada implantação e, ao mesmo tempo, garantir que o recurso esteja configurado corretamente.
Agora, ao declarar o recurso do Azure Cosmos DB, você pode fazer referência ao parâmetro da matriz:
resource account 'Microsoft.DocumentDB/databaseAccounts@2022-08-15' = {
name: accountName
location: location
properties: {
locations: cosmosDBAccountLocations
}
}
Assim é fácil usar um valor de parâmetro diferente para o ambiente de desenvolvimento, alterando o valor do parâmetro. Em breve você aprenderá como é possível fornecer valores de parâmetros diferentes sem modificar o modelo original.
Especificar uma lista de valores permitidos
Às vezes, você precisa garantir que um parâmetro tenha determinados valores. Por exemplo, sua equipe pode decidir que os Planos do Serviço de Aplicativo de produção devem ser implantados usando os SKUs Premium v3. Para impor essa regra, você pode usar o decorador de parâmetro @allowed
. Um decorador de parâmetro é uma maneira de fornecer ao Bicep informações sobre qual deve ser o valor de um parâmetro. Veja como o parâmetro de cadeia de caracteres appServicePlanSkuName
pode ser restringido para que apenas alguns valores específicos possam ser atribuídos:
@allowed([
'P1v3'
'P2v3'
'P3v3'
])
param appServicePlanSkuName string
Dica
Use o decorador @allowed
com moderação. Se você usar muito esse decorador, poderá bloquear implantações válidas se não mantiver a lista atualizada. O exemplo anterior permite apenas SKUs Premium v3 na produção. Se você precisar usar o mesmo modelo para implantar alguns ambientes de não produção mais baratos, a lista de valores permitidos poderá impedir o uso de outras SKUs que você precisa usar.
Restringir comprimento e valores do parâmetro
Ao usar parâmetros de cadeia de caracteres, geralmente é necessário limitar o comprimento da cadeia de caracteres. Vamos considerar o exemplo de nomenclatura de recursos do Azure. Todos os tipos de recursos do Azure têm limites em relação ao comprimento dos nomes. É uma boa prática especificar o comprimento mínimo e máximo de caracteres para parâmetros que controlam a nomenclatura para evitar posteriormente erros durante a implantação. Você pode usar os decoradores @minLength
e @maxLength
como comprimentos mínimo e máximo dos caracteres que você deseja permitir em um parâmetro.
Aqui está um exemplo que declara o parâmetro de cadeia de caracteres storageAccountName
, cujo comprimento pode ficar entre 5 e 24 caracteres:
@minLength(5)
@maxLength(24)
param storageAccountName string
Esse parâmetro inclui dois decoradores. É possível aplicar vários decoradores a um parâmetro colocando cada decorador em sua própria linha.
Observação
Também é possível aplicar os decoradores @minLength
e @maxLength
aos parâmetros da matriz para controlar quantos itens podem estar na matriz.
Quando você trabalha com parâmetros numéricos, talvez seja necessário que os valores estejam em um intervalo específico. Por exemplo, sua empresa de brinquedos pode decidir que, sempre que alguém implantar um Plano do Serviço de Aplicativo, será obrigatório implantar pelo menos uma instância, mas não mais do que 10 instâncias do plano. Para atender aos requisitos, você pode usar os decoradores @minValue
e @maxValue
para especificar os valores mínimos e máximos permitidos. O exemplo a seguir declara o parâmetro inteiro appServicePlanInstanceCount
, cujo valor pode estar apenas entre 1 e 10 (inclusive):
@minValue(1)
@maxValue(10)
param appServicePlanInstanceCount int
Adicionar descrições aos parâmetros
Os parâmetros são uma ótima maneira de possibilitar que seus modelos sejam reutilizados por outras pessoas. Ao usar seus modelos, elas precisarão entender o que cada parâmetro faz para que possam fornecer os valores corretos. O Bicep fornece o decorador @description
para que você possa documentar a finalidade dos parâmetros de forma legível.
@description('The locations into which this Cosmos DB account should be configured. This parameter needs to be a list of objects, each of which has a locationName property.')
param cosmosDBAccountLocations array
É uma boa prática fornecer descrições para os parâmetros. Tente tornar as descrições úteis e forneça informações importantes sobre o que o modelo precisa para os valores de parâmetro.
Observação
Os modelos de Bicep às vezes podem ser disponibilizados no portal do Azure para que os usuários os implantem, da mesma forma que você usa as especificações do modelo. O portal usa as descrições e outros decoradores em parâmetros para ajudar os usuários a entenderem o que é necessário no valor de parâmetro.