了解 Bicep 文件结构和语法

已完成

但是,Azure Bicep 附带了自己的语法,而且很容易理解和遵循。 我们不会深入探讨语法和结构,但可以使用示例来回顾一下主要概念。

创建 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

作用域

默认情况下,所有模板的目标范围都设置为 resourceGroup,但是,可以通过显式设置它来进行自定义。 允许的其他值:subscriptionmanagementGrouptenant

参数

你已在上一单元中使用了参数。 使用这些参数可以在运行时通过为名称、位置、前缀等提供潜在值来自定义模板部署。

参数还具有编辑器可以验证的类型,还可以具有默认值,使其在部署时成为可选参数。 此外,你可以看到它们可以有验证规则,通过防止使用任何无效的值,从创作开始就使部署更加可靠。 有关详细信息,请参阅 Bicep 中的参数

变量

与参数类似,变量在创建更可靠的可读模板方面发挥着作用。 任何复杂的表达式都可以存储在变量中,并在整个模板中使用。 当你定义变量时,将从值推断类型。

在上面的示例中,uniqueStorageName 用于简化资源定义。 有关详细信息,请参阅 Bicep 中的变量

资源

当你需要在模板中声明资源时,将使用 resource 关键字。 资源声明包含资源的符号名称,可以用来在以后引用该资源,既可以用于定义子资源,也可以将其属性用于隐式依赖项(如父子关系)。

有些属性是所有资源共有的,例如 locationnameproperties。 有些属性是特定于资源的,可用于自定义资源定价层、SKU 等。

可以通过引用父级在资源内部或外部定义子资源。 在上面的示例中,在存储帐户资源中定义了一个文件共享。 如果打算在资源外部定义资源,则需要更改模板:

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
}

有关详细信息,请参阅 Bicep 中的资源声明

模块

如果需要真正可重复使用的模板,则无法避免使用模块。 借助模块,你可以在其他 Bicep 文件中重复使用 Bicep 文件。 在模块中,定义需要部署的内容以及所需的任何参数,当你在另一个文件中重复使用时,只需引用该文件并提供参数。 其余的由 Azure Bicep 负责完成。

在上面的示例中,你使用的模块可能正在部署一个 App Service。 有关详细信息,请参阅在 Bicep 中使用模块

Outputs

可以使用输出将部署中的值传递到外部,无论是在 CI/CD 管道中,还是在本地终端或云 Shell 中。 这样,就可以在部署完成后访问存储终结点或应用程序 URL 等值。

只需要关键字 output 和要访问的属性:

output storageEndpoint endpoints = stg.properties.primaryEndpoints

若要查找详细信息,请参阅 Bicep 中的输出

其他功能

Bicep 文件中提供了许多其他功能,例如循环、条件部署、多行字符串、引用现有云资,等等。 事实上,ARM 模板中的任何有效函数在 Bicep 文件中也同样有效。

后续步骤

在下一单元中,你将了解如何在 Azure Pipeline 中使用 Bicep。