Compreender a estrutura e a sintaxe dos ficheiros Bicep

Concluído

O Azure Bicep vem com sua própria sintaxe, no entanto, é fácil de entender e seguir. Não vamos nos aprofundar na sintaxe e na estrutura, mas vamos analisar os principais conceitos usando um exemplo.

Exemplo de arquivo Bicep .bicep

@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

Âmbito

Por padrão, o escopo de destino de todos os modelos é definido para resourceGroup, no entanto, você pode personalizá-lo definindo-o explicitamente. 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, locais, prefixos, etc.

Os parâmetros também têm tipos que os editores podem validar e também 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 diretamente da criação. Para obter mais informações, consulte Parâmetros no Bicep.

Variáveis

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 a partir do valor.

No exemplo acima, o uniqueStorageName é usado para simplificar a definição de recurso. Para obter mais informações, consulte Variáveis no Bicep.

Recursos

A resource palavra-chave é usada quando você precisa declarar um recurso em seus modelos. A declaração de recurso tem um nome simbólico para o recurso que pode ser usado para fazer referência a esse recurso posteriormente para definir um subrecurso ou usar suas propriedades para uma dependência implícita, como uma relação pai-filho.

Há certas propriedades que são comuns para todos os recursos, como location, namee properties. Há propriedades específicas de recursos que podem ser usadas para personalizar a camada de preços de recursos, SKUe assim por diante.

Você pode definir subrecursos 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 recurso no Bicep.

Módulos

Se você quiser modelos verdadeiramente reutilizáveis, não pode 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 quaisquer parâmetros necessários e, quando o reutiliza em outro arquivo, tudo o que você precisa fazer é referenciar o arquivo e fornecer os parâmetros. O resto é cuidado pelo Azure Bicep.

No exemplo acima, você está usando um módulo que presumivelmente está implantando um App Servicearquivo . Para obter mais informações, consulte Usando módulos no Bicep.

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 ou em um terminal local ou Cloud Shell. Isso permitiria que você acessasse um valor como ponto de extremidade de armazenamento ou URL do aplicativo após a conclusão da implantação.

Tudo o que precisa é da output palavra-chave e do imóvel a que gostaria de aceder:

output storageEndpoint endpoints = stg.properties.primaryEndpoints

Para obter mais informações, consulte Saídas no Bicep.

Outras funcionalidades

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 ARM também é válida dentro de um arquivo Bicep.

Próximos passos

Na próxima unidade, você aprenderá a usar o Bicep em um Pipeline do Azure.