Entender a estrutura e a sintaxe de arquivos Bicep

Concluído

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.