Entender a estrutura e a sintaxe de arquivos Bicep
O Azure Bicep tem a própria sintaxe, no entanto, ela é fácil de entender e seguir. Não vamos nos aprofundar na sintaxe e na estrutura, mas vamos examinar os principais conceitos usando um exemplo.
Arquivo .bicep
Bicep de exemplo
@minLength(3)
@maxLength(11)
param storagePrefix string
param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2019-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
module webModule './webApp.bicep' = {
name: 'webDeploy'
params: {
skuName: 'S1'
location: location
}
}
output storageEndpoint object = stg.properties.primaryEndpoints
Escopo
Por padrão, o escopo de destino de todos os modelos é definido como resourceGroup
. No entanto, você pode personalizá-lo definindo-o explicitamente. Assim como outros valores permitidos, subscription
, managementGroup
e tenant
.
Parâmetros
Você já usou os parâmetros na unidade anterior. Eles permitem que você personalize sua implantação de modelo em tempo de execução fornecendo valores potenciais para nomes, localização, prefixos etc.
Os parâmetros também têm tipos que os editores podem validar e podem ter valores padrão para torná-los opcionais no momento da implantação. Além disso, você pode ver que eles podem ter regras de validação para tornar a implantação mais confiável, impedindo qualquer valor inválido já na criação. Para obter mais informações, consulte Parâmetros no Bicep.
Variáveis
De modo semelhante aos parâmetros, as variáveis desempenham um papel na criação de um modelo mais robusto e legível. Qualquer expressão complexa pode ser armazenada em uma variável e usada em todo o modelo. Quando você define uma variável, o tipo é inferido do valor.
No exemplo acima, o recurso uniqueStorageName
é usado para simplificar a definição do recurso. Para obter mais informações, consulte Variáveis no Bicep.
Recursos
A palavra-chave resource
é usada quando você precisa declarar um recurso em seus modelos. A declaração do recurso tem um nome simbólico para o recurso que pode ser usado para fazer referência a esse recurso posteriormente a fim de definir um sub-recurso ou usar suas propriedades para uma dependência implícita, como uma relação pai-filho.
Certas propriedades são comuns para todos os recursos, como location
, name
e properties
. Há propriedades específicas do recurso que podem ser usadas para personalizar o tipo de preço do recurso, SKU
, e assim por diante.
Você pode definir sub-recursos dentro ou fora de um recurso fazendo referência ao pai. No exemplo acima, um compartilhamento de arquivos é definido dentro do recurso de conta de armazenamento. Se a intenção fosse definir o recurso fora dele, você precisaria alterar seu modelo:
resource storage 'Microsoft.Storage/storageAccounts@2021-02-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2021-02-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2021-02-01' = {
name: 'exampleshare'
parent: service
}
Para obter mais informações, consulte Declaração de recursos no Bicep.
Módulos
Se você quiser modelos realmente reutilizáveis, não poderá evitar o uso de um módulo. Os módulos permitem que você reutilize um arquivo Bicep em outros arquivos Bicep. Em um módulo, você define o que precisa implantar e os parâmetros necessários e, ao reutilizá-lo em outro arquivo, basta fazer referência ao arquivo e fornecer os parâmetros. O restante é feito pelo Azure Bicep.
No exemplo acima, você está usando um módulo que, presumivelmente, está implantando um App Service
. Para obter mais informações, confira Usando módulos no Biceps.
Saídas
Você pode usar saídas para passar valores de sua implantação para o mundo exterior, seja dentro de um pipeline de CI/CD, em um terminal local ou no Cloud Shell. Isso permitiria que você acessasse um valor, como o ponto de extremidade de armazenamento ou a URL do aplicativo, após a conclusão da implantação.
Você precisa apenas da palavra-chave output
e da propriedade que gostaria de acessar:
output storageEndpoint endpoints = stg.properties.primaryEndpoints
Para encontrar mais informações, consulte Saídas no Bicep.
Outros recursos
Há muitos outros recursos disponíveis em um arquivo Bicep, como loops, implantação condicional, cadeias de caracteres de várias linhas, referência a um recurso de nuvem existente e muito mais. Na verdade, qualquer função válida dentro de um modelo do ARM também é válida dentro de um arquivo Bicep.
Próximas etapas
Na próxima unidade, você aprenderá a usar o Bicep em um Pipeline do Azure.