Estructura y sintaxis de un archivo Bicep

Completado

Azure Bicep incluye su propia sintaxis, pero es fácil de entender y seguir. No profundizaremos en la sintaxis y la estructura, pero vamos a revisar los conceptos principales con un ejemplo.

Archivo .bicep Bicep de ejemplo

@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

De forma predeterminada, el ámbito de destino de todas las plantillas se establece para resourceGroup; sin embargo, puede personalizarlo estableciéndolo explícitamente. Como otros valores permitidos, subscription, managementGroup y tenant.

Parámetros

Ya ha usado los parámetros en la unidad anterior. Permiten personalizar la implementación de plantillas en el entorno de ejecución proporcionando valores potenciales para nombres, ubicación, prefijos, etc.

Los parámetros también tienen tipos que los editores pueden validar y también pueden tener valores predeterminados para que sean opcionales en el momento de la implementación. Además, puede ver que pueden tener reglas de validación para que la implementación sea más confiable al evitar que cualquier valor no válido desde la creación. Para más información, consulte Parámetros en Bicep.

variables

De forma similar a los parámetros, las variables desempeñan un papel en la creación de una plantilla más sólida y legible. Cualquier expresión compleja se puede almacenar en una variable y usarse en toda la plantilla. Al definir una variable, el tipo se deduce del valor.

En el ejemplo anterior, uniqueStorageName se usa para simplificar la definición de recursos. Para más información, consulte Variables en Bicep.

Recursos

La palabra clave resource se usa cuando necesita declarar un recurso en las plantillas. La declaración del recurso tiene un nombre simbólico para el recurso que se puede utilizar para hacer referencia a ese recurso más tarde, ya sea para definir un subrecurso o usar sus propiedades para una dependencia implícita como una relación de elementos primarios y secundarios.

Hay ciertas propiedades que son comunes para todos los recursos, como location, name y properties. Hay propiedades específicas del recurso que se pueden usar para personalizar el plan de tarifa de recursos, SKU, etc.

Puede definir subrecursos dentro de un recurso o fuera haciendo referencia al elemento primario. En el ejemplo anterior, se define un recurso compartido de archivos dentro del recurso de la cuenta de almacenamiento. Si la intención era definir el recurso fuera de él, tendría que cambiar la plantilla:

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 más información, consulte Declaración de recursos en Bicep.

Módulos

Si desea plantillas realmente reutilizables, no puede evitar el uso de un módulo. Los módulos permiten reutilizar un archivo Bicep en otros archivos Bicep. En un módulo, definirá lo que necesita implementar y los parámetros necesarios y, al reutilizarlo en otro archivo, lo único que debe hacer es hacer referencia al archivo y proporcionar los parámetros. Del resto se encarga Azure Bicep.

En el ejemplo anterior, está usando un módulo que probablemente implementa App Service. Para más información, vea Uso de módulos en Bicep.

Salidas

Puede utilizar las salidas para pasar los valores de su implementación al mundo exterior, ya sea dentro de una canalización CI/CD o en un terminal local o Cloud Shell. Esto le permitiría acceder a un valor como el punto de conexión de almacenamiento o la dirección URL de la aplicación una vez finalizada la implementación.

Todo lo que necesita es la palabra clave output y la propiedad a la que desea acceder:

output storageEndpoint endpoints = stg.properties.primaryEndpoints

Para más información, consulte Salidas en Bicep.

Otras características

Hay muchas otras características disponibles en un archivo de Bicep, como bucles, implementación condicional, cadenas de varias líneas y referencia a un recurso en la nube existente, entre otras. De hecho, cualquier función válida dentro de una plantilla de ARM también es válida dentro de un archivo de Bicep.

Pasos siguientes

En la unidad siguiente, aprenderá a usar Bicep en una canalización de Azure.