了解 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
,但是,可以通过显式设置它来进行自定义。 允许的其他值:subscription
、managementGroup
和 tenant
。
参数
你已在上一单元中使用了参数。 使用这些参数可以在运行时通过为名称、位置、前缀等提供潜在值来自定义模板部署。
参数还具有编辑器可以验证的类型,还可以具有默认值,使其在部署时成为可选参数。 此外,你可以看到它们可以有验证规则,通过防止使用任何无效的值,从创作开始就使部署更加可靠。 有关详细信息,请参阅 Bicep 中的参数。
变量
与参数类似,变量在创建更可靠的可读模板方面发挥着作用。 任何复杂的表达式都可以存储在变量中,并在整个模板中使用。 当你定义变量时,将从值推断类型。
在上面的示例中,uniqueStorageName
用于简化资源定义。 有关详细信息,请参阅 Bicep 中的变量。
资源
当你需要在模板中声明资源时,将使用 resource
关键字。 资源声明包含资源的符号名称,可以用来在以后引用该资源,既可以用于定义子资源,也可以将其属性用于隐式依赖项(如父子关系)。
有些属性是所有资源共有的,例如 location
、name
和 properties
。 有些属性是特定于资源的,可用于自定义资源定价层、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。