本文介绍用于将资源添加到 Bicep 文件的语法。 一个 Bicep 文件中最多可以包含 800 个资源。 有关详细信息,请参阅模板限制。
定义资源
使用 resource 关键字添加资源声明。 设置资源的符号名称。 符号名称与资源名称不同。 使用符号名称引用Bicep文件的其他部分中的资源。
@<decorator>(<argument>)
resource <symbolic-name> '<full-type-name>@<api-version>' = {
<resource-properties>
}
存储帐户的声明可以从以下项开始:
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
...
}
符号名称区分大小写。 它们可以包含字母、数字和下划线(_)。 不能以数字开头。 资源不能与参数、变量或模块同名。
有关可用的资源类型和版本,请参阅Bicep资源参考。 Bicep 不支持 apiProfile,而这在 Azure 资源管理器模板 (ARM 模板) JSON 中可用。
若要按条件部署资源,请使用 if 语法。 有关详细信息,请参阅 Bicep 中的条件部署。
resource <symbolic-name> '<full-type-name>@<api-version>' = if (condition) {
<resource-properties>
}
若要部署一个资源的多个实例,请使用 for 语法。 可使用 batchSize 修饰器指定是串行部署实例还是并行部署实例。 有关详细信息,请参阅 Bicep 中的迭代循环。
@batchSize(int) // optional decorator for serial deployment
resource <symbolic-name> '<full-type-name>@<api-version>' = [for <item> in <collection>: {
<properties-to-repeat>
}]
还可以对资源属性使用 for 语法来创建数组。
resource <symbolic-name> '<full-type-name>@<api-version>' = {
properties: {
<array-property>: [for <item> in <collection>: <value-to-repeat>]
}
}
使用修饰器
以格式 @expression 编写修饰器,并将其置于资源声明之上。 下表显示了资源的可用修饰器。
| 装饰器 | Argument | 说明 |
|---|---|---|
| batchSize | 无 | 设置实例以按顺序部署。 |
| 说明 | 字符串 | 请为该资源提供说明。 |
| nullIfNotFound | 无 | 如果该资源不存在,资源符号会求值为 null,而不是导致部署失败。 |
| onlyIfNotExists | 无 | 仅当目标范围中尚不存在资源时,才部署资源。 |
修饰器位于 sys 命名空间中。 如果需要将修饰器与具有相同名称的其他项区分开来,请在修饰器前面加上 sys。 例如,如果你的 Bicep 文件包含一个名为 description 的参数,则在使用 description 修饰器时,必须添加 sys 命名空间。
批量大小
只能将 @batchSize() 应用于使用 for 表达式的资源或模块定义。
默认情况下,将并行部署资源。 添加 batchSize(int) 修饰器时,将串行部署实例。
@batchSize(3)
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2025-06-01' = [for storageName in storageAccounts: {
...
}]
有关详细信息,请参阅批量部署。
说明
若要添加解释,请将说明添加到资源声明。 例如:
@description('Create a number of storage accounts')
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2025-06-01' = [for storageName in storageAccounts: {
...
}]
可以使用 Markdown 格式的文本作为说明文本。
nullIfNotFound
将 @nullIfNotFound() 修饰器应用于现有资源声明。 引用Bicep中的现有资源(使用现有关键字)时,如果未在部署时找到该资源,ARM 部署将失败。 通过应用 @nullIfNotFound(),如果资源不存在,资源符号会计算为 null,而不会导致部署失败。
@nullIfNotFound()
resource centralWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' existing = {
name: 'central-log-analytics'
}
// Safe access
output workspaceId string = centralWorkspace.?id ?? ''
output workspaceExists bool = centralWorkspace != null
onlyIfNotExists
默认情况下,当 Bicep 部署运行时,Azure 资源管理器 (ARM) 会创建资源(如果其不存在)或更新资源(如果其已存在)。 如果现有资源具有不同于模板的属性,ARM 可能会尝试更新它,或者如果不允许更新,则失败。
从 Bicep 版本 v0.38.3 开始,@onlyIfNotExists()修饰器指示 ARM 仅在资源不存在时才创建资源。 如果 ARM 找到具有资源 ID 的资源,则会跳过创建并保留现有资源不变。
@onlyIfNotExists()
resource example 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'mystorageacct'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
资源名称
每个资源都有一个名称。 设置资源名称时,请注意资源名称的规则和限制。
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
...
}
通常,将名称设置为参数,以便在部署期间传入不同的值。
@minLength(3)
@maxLength(24)
param storageAccountName string
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: storageAccountName
...
}
资源位置
许多资源需要一个位置。 你可以通过 intellisense 确定资源是否需要指定位置。 以下示例添加用于存储帐户的位置参数。
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: 'chinaeast2'
...
}
通常,将位置设置为参数,以便可以部署到不同的位置。
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: location
...
}
不同位置支持的资源类型不一样。 若要获取Azure服务支持的位置,请参阅“按区域提供的产品”。 若要获取资源类型支持的位置,请使用 Azure PowerShell 或 Azure CLI。
((Get-AzResourceProvider -ProviderNamespace Microsoft.Batch).ResourceTypes `
| Where-Object ResourceTypeName -eq batchAccounts).Locations
资源标记
可以在部署期间对资源应用标记。 可以通过标记对部署的资源进行逻辑组织。 有关指定标记的不同方法的示例,请参阅 ARM 模板标记。
资源的托管标识
某些资源支持 Azure 资源托管标识。 这些资源在资源声明的根级别包含一个标识对象。
可以使用系统分配的或用户分配的标识。
以下示例演示如何为 Azure Kubernetes 服务群集配置系统分配的标识。
resource aks 'Microsoft.ContainerService/managedClusters@2025-08-02-preview' = {
name: clusterName
location: location
tags: tags
identity: {
type: 'SystemAssigned'
}
下一个示例显示如何为虚拟机配置用户分配的身份。
param userAssignedIdentity string
resource vm 'Microsoft.Compute/virtualMachines@2025-04-01' = {
name: vmName
location: location
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${userAssignedIdentity}': {}
}
}
特定于资源的属性
上述属性对于大多数资源类型都是通用的。 设置这些值后,设置特定于要部署的资源类型的属性。
使用 Intellisense 来确定哪些属性可用以及哪些属性是必需的。 下面的示例将为存储帐户设置其余属性。
resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
name: 'examplestorage'
location: 'chinaeast2'
sku: {
name: 'Standard_LRS'
tier: 'Standard'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
后续步骤
- 若要按条件部署资源,请参阅 Bicep 中的条件部署。
- 若要参考现有资源,请参阅 Bicep 中的现有资源。
- 若要了解如何确定部署顺序,请参阅 Bicep 中的资源依赖关系。