本文說明可用來將資源新增至 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'
}
}
下一步
- 若要有條件地部署資源,請參閱 Bicep 中的條件式部署。
- 若要參照現有的資源,請參閱 Bicep 中的現有資源。
- 若要了解系統如何決定部署順序,請參閱 Bicep 中的資源相依性。