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 Resource Manager 範本 (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 沒有 設定執行個體以依順序部署。
描述 字串 提供資源的描述。
nullIfNotFound 沒有 如果資源不存在,資源符號會解析為 null,而不會導致部署失敗。
onlyIfNotExists 沒有 只有在目標範圍中尚未存在時,才部署資源。

裝飾器位於 sys 命名空間 中。 如果您需要區別裝飾項目與具有相同名稱的另一個項目,請在裝飾項目前面加上 sys。 例如,如果您的 Bicep 檔案包含名稱為 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(若找不到則傳回 null)

將 @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: '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 Service 叢集設定系統指派的身分識別。

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'
  }
}

下一步