Cloud & IT Cert Prep · 课时

Bicep:现代 Azure IaC

学习 Bicep 简洁的语法,了解它作为 ARM JSON 强类型抽象层的作用,将现有 ARM 模板转换为 Bicep,并使用 Azure CLI 部署。

第 3 / 4 课13 个步骤

Bicep:现代 Azure IaC 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

什么是 Bicep,以及为什么使用它?

Bicep 是 Microsoft 开发的一种特定领域语言(DSL),是 ARM JSON 模板的强类型、简洁替代方案。Bicep 会编译为标准 ARM JSON,因此使用相同的 ARM 部署引擎,并且从发布之初就支持所有 Azure 资源类型。Bicep 去除了原始 JSON 中大量所需的样板内容,并提供更完善的类型安全和 IntelliSense 支持。

Bicep 与 ARM JSON 语法比较

在 ARM 模板中,同一个存储帐户需要约 25 行 JSON,而在 Bicep 中只需约 8 行。Bicep 去除了 '$schema'、contentVersion、resources 数组包装器以及冗长的表达式语法。由于 Bicep 是 ARM JSON 之上的直接抽象层,属性名称和类型保持不变——运行时完全没有差异。

// Bicep: deploy a storage account
param storageAccountName string
param location string = resourceGroup().location
param sku string = 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: sku
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
    minimumTlsVersion: 'TLS1_2'
  }
}

Bicep 中的参数和装饰器

Bicep 参数使用简洁的 param name type = defaultValue 语法。您可以直接在参数上方应用装饰器(以 @ 开头),添加 @minLength()、@maxLength()、@allowed() 和 @description() 等约束。@secure() 装饰器会将参数标记为敏感参数,其作用相当于 ARM JSON 中的 secureString。

@description('Globally unique name for the storage account')
@minLength(3)
@maxLength(24)
param storageAccountName string

@allowed(['Standard_LRS', 'Standard_GRS', 'Premium_LRS'])
param sku string = 'Standard_LRS'

@secure()
param adminPassword string

Bicep 中的变量和表达式

Bicep 变量使用 var 关键字声明,并且可以包含任何表达式,包括使用 '${value}' 语法进行字符串插值。与 ARM JSON 相比,字符串插值是 Bicep 最易读的改进之一——不再需要调用 concat() 函数。Bicep 还支持使用三元运算符 condition ? trueValue : falseValue 的条件表达式。

param environment string = 'dev'
param baseName string = 'myapp'

var uniqueSuffix = uniqueString(resourceGroup().id)
var storageAccountName = '${baseName}${environment}${uniqueSuffix}'
var isProd = environment == 'prod'
var skuName = isProd ? 'Standard_GRS' : 'Standard_LRS'

资源声明和符号名称

在 Bicep 中,每个资源都有一个符号名称——这是用于在模板中引用该资源的标识符。符号名称不同于资源的 Azure 名称。使用符号名称可以访问资源属性,并通过在一个资源中引用另一个资源来建立隐式依赖,从而无需显式声明 dependsOn 数组。

resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' = {
  name: 'myVNet'
  location: location
  properties: {
    addressSpace: { addressPrefixes: ['10.0.0.0/16'] }
  }
}

// Implicit dependency via symbolic name reference
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' = {
  parent: vnet  // Bicep knows to create vnet first
  name: 'mySubnet'
  properties: {
    addressPrefix: '10.0.1.0/24'
  }
}

Bicep 输出

Bicep 的输出使用 output 关键字声明,后面依次跟随输出名称、类型和值。您可以使用符号名称和点号表示法引用已部署资源的属性,这比 ARM 的 reference() 函数易读得多。输出对于在 Bicep 模块调用之间传递值至关重要。

output storageAccountName string = storageAccount.name
output blobEndpoint string = storageAccount.properties.primaryEndpoints.blob
output storageAccountId string = storageAccount.id

Bicep 模块

Bicep 模块相当于 ARM JSON 中的链接模板,可将基础结构拆分为可重复使用的组件。模块本质上就是另一个 .bicep 文件。您可以使用 module 关键字引用模块,传递参数并使用其输出。模块还可以发布到 Azure 容器注册表,并从中使用,以便整个团队重复使用。

// main.bicep — consuming a storage module
module storage './modules/storage.bicep' = {
  name: 'storageDeploy'
  params: {
    storageAccountName: 'myuniquestorage'
    location: location
    sku: 'Standard_LRS'
  }
}

// Reference module output in parent template
output blobUri string = storage.outputs.blobEndpoint

将 ARM 模板转换为 Bicep

如果您已经有现成的 ARM JSON 模板,可以使用 Bicep CLI 通过 bicep decompile 将其反编译为 Bicep。结果可能需要进行一些手动清理,但它能为您提供非常出色的起点。Microsoft 还提供了一个在线演练场,网址为 aka.ms/bicepdemo,您可以在那里粘贴 ARM JSON,并实时查看对应的 Bicep。

# Install the Bicep CLI (or use it via Azure CLI)
az bicep install
az bicep upgrade

# Decompile existing ARM JSON to Bicep
az bicep decompile --file azuredeploy.json
# Produces azuredeploy.bicep in the same directory

# Compile Bicep to ARM JSON (for inspection)
az bicep build --file main.bicep

使用 Azure CLI 部署 Bicep

Azure CLI 直接支持 Bicep 文件,部署前无需手动将其编译为 ARM JSON。将 .bicep 文件路径与 --template-file 标志一起传递给 az deployment group create,CLI 会透明地完成编译。相同的 validate 和 what-if 子命令也可以处理 Bicep 文件,其用法与处理 ARM JSON 完全一致。

# Deploy a Bicep file directly
az deployment group create \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

# What-if preview with Bicep
az deployment group what-if \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

Bicep 中的循环和条件

Bicep 支持使用 for ... in 语法执行资源循环,根据数组参数创建资源的多个实例,从而避免复制粘贴造成的重复。if 关键字支持条件资源部署:只有在特定条件为真时才包含资源。这两项功能分别会编译为 ARM 的 copy 和 condition 构造。

// Loop: create multiple storage accounts
param storageNames array = ['alpha', 'beta', 'gamma']

resource stores 'Microsoft.Storage/storageAccounts@2023-01-01' = [for name in storageNames: {
  name: '${name}${uniqueString(resourceGroup().id)}'
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
}]

// Condition: only deploy in prod
param deployKeyVault bool = false

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = if (deployKeyVault) {
  name: 'myKeyVault'
  location: location
  properties: { sku: { family: 'A', name: 'standard' }, tenantId: subscription().tenantId, accessPolicies: [] }
}

Bicep 工具和代码检查

Visual Studio Code 的 Bicep 扩展可在您输入时提供丰富的 IntelliSense、类型检查和行内错误突出显示。Bicep CLI 包含一个代码检查器,可检查未使用的参数、缺少说明和错误的 API 版本等最佳实践违规情况。在 CI 流水线中运行 az bicep lint --file main.bicep,即可在部署前发现问题。

# Run the Bicep linter
az bicep lint --file main.bicep

# Format a Bicep file
az bicep format --file main.bicep

# Generate resource type documentation
az bicep generate-params --file main.bicep --output-format json

快速检查

测试您对本课 Microsoft Azure 基础知识(AZ-900)概念的理解。

课程回顾

在本课中,您学到了:Bicep 是位于 ARM JSON 之上的简洁、强类型抽象层,可编译为标准 ARM 模板;模块和循环支持编写可重复使用且符合 DRY 原则的基础结构代码;Azure CLI 可直接部署 Bicep 文件,并支持相同的 validate/what-if/deploy 工作流。接下来我们将学习在 Azure 上使用 Terraform。

免费开始

用 AI 导师学习 Cloud & IT Cert Prep — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
150
课程
600

常见问题解答

「Bicep:现代 Azure IaC」课时是免费的吗?

是的 — 「Bicep:现代 Azure IaC」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「Bicep:现代 Azure IaC」这节课中我会学到什么?

学习 Bicep 简洁的语法,了解它作为 ARM JSON 强类型抽象层的作用,将现有 ARM 模板转换为 Bicep,并使用 Azure CLI 部署。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Bicep:现代 Azure IaC」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Azure 资源管理器的工作原理
  2. 编写 ARM 模板
  3. Bicep:现代 Azure IaC
  4. Azure 上的 Terraform
← 返回 Cloud & IT Cert Prep