快速入門:以 Bicep 建立多個資源執行個體

了解如何使用不同的 for 語法,以 Bicep 建立多個資源執行個體。 雖然本文只示範如何建立多個資源執行個體,但您可以使用相同的方法來定義模組、變數、屬性或輸出的複本。 若要深入了解,請參閱 Bicep 迴圈

本文包含下列主題:

必要條件

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

若要設定您的環境以進行 Bicep 開發,請參閱安裝 Bicep 工具 (部分機器翻譯)。 完成那些步驟之後,您將會有 Visual Studio Code (英文) 和Bicep 延伸模組 (英文)。 您也會有最新的 Azure CLI 或最新的 Azure PowerShell 模組

建立單一執行個體

在本節中,您會定義用來建立儲存體帳戶的 Bicep 檔案,然後部署 Bicep 檔案。 後續各節會提供不同 for 語法的 Bicep 樣本。 您可以使用相同的部署方法來部署和實驗這些樣本。 如果部署失敗,原因可能是下列兩者之一:

  • 儲存體帳戶名稱太長。 儲存體帳戶名稱必須介於 3 到 24 個字元的長度,而且只能包含數字和小寫字母。
  • 儲存體帳戶名稱重複。 儲存體帳戶名稱在 Azure 中必須是唯一的。

下列 Bicep 檔案會定義一個儲存體帳戶:

param rgLocation string = resourceGroup().location

resource createStorage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

將 Bicep 檔案儲存在本機,然後使用 Azure CLI 或 Azure PowerShell 來部署 Bicep 檔案:

resourceGroupName = "{provide-a-resource-group-name}"
templateFile="{provide-the-path-to-the-bicep-file}"

az group create --name $resourceGroupName --location eastus

az deployment group create --resource-group $resourceGroupName --template-file $templateFile

使用整數索引

下列範例使用具有索引的 for 迴圈建立兩個儲存體帳戶:

param rgLocation string = resourceGroup().location
param storageCount int = 2

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for i in range(0, storageCount): {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

output names array = [for i in range(0,storageCount) : {
  name: createStorages[i].name
} ]

索引編號可用於儲存體帳戶名稱的一部分。 部署 Bicep 檔案之後,您會得到兩個類似這樣的儲存體帳戶:

Use integer index with 0 as the starting number

在範圍 () 內,第一個數字是起始數字,而第二個數字是迴圈執行次數。 因此,如果您將其變更為範圍 (3,2),您也會取得兩個儲存體帳戶:

Use integer index with 3 as the starting number

上述樣本的輸出顯示了如何參考在迴圈中建立的資源。 輸出如下:

"outputs": {
  "names": {
    "type": "Array",
    "value": [
      {
        "name": "0storage52iyjssggmvue"
      },
      {
        "name": "1storage52iyjssggmvue"
      }
    ]
  }
},

使用陣列元素

您可以在陣列中執行迴圈。 下列範例顯示了字串陣列。

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

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

迴圈會使用陣列中的所有字串作為儲存體帳戶名稱的一部分。 在此情況下,迴圈會建立兩個儲存體帳戶:

Use an array of strings

您也可以在物件陣列中執行迴圈。 迴圈不僅會自訂儲存體帳戶名稱,也會設定 SKU。

param rgLocation string = resourceGroup().location
param storages array = [
  {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
]

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for storage in storages: {
  name: '${storage.name}obj${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: storage.skuName
  }
  kind: 'StorageV2'
}]

迴圈會建立兩個儲存體帳戶。 名稱開頭為 fabrikam 的儲存體帳戶,SKU 是 Premium_LRS

Use an array of strings

使用陣列和索引

在相同的情況下,您可能會想要結合陣列迴圈與索引迴圈。 下列樣本示範如何使用陣列和索引編號作為命名慣例。

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for (name, i) in storageNames: {
  name: '${i}${name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

部署上述樣本之後,您會建立兩個類似這樣的儲存體帳戶:

Use an array of strings and index number

使用字典物件

若要逐一查看字典物件中的元素,請使用項目函式,將物件轉換成陣列。 您可以使用 value 屬性來取得物件的屬性。

param rgLocation string = resourceGroup().location

param storageConfig object = {
  storage1: {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  storage2: {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
}

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for config in items(storageConfig): {
  name: '${config.value.name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: config.value.skuName
  }
  kind: 'StorageV2'
}]

迴圈會建立兩個儲存體帳戶。 名稱開頭為 fabrikam 的儲存體帳戶,SKU 是 Premium_LRS

Use a dictionary object

具有條件的迴圈

針對資源和模組,您可以在迴圈語法新增 if 運算式,有條件地部署集合。

param rgLocation string = resourceGroup().location
param storageCount int = 2
param createNewStorage bool = true

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for i in range(0, storageCount): if(createNewStorage) {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

如需詳細資訊,請參閱以 Bicep 的條件式部署

清除資源

如果不再需要 Azure 資源,請使用 Azure CLI 或 Azure PowerShell 模組來刪除快速入門資源群組。

resourceGroupName = "{provide-the-resource-group-name}"

az group delete --name $resourceGroupName

下一步