Rychlý start: Vytvoření více instancí prostředků v Bicep

Naučte se používat různé for syntaxe k vytvoření více instancí prostředků v nástroji Bicep. I když tento článek popisuje pouze vytváření více instancí prostředků, stejné metody lze použít k definování kopií modulu, proměnné, vlastnosti nebo výstupu. Další informace najdete v tématu Smyčky Bicep.

Tento článek obsahuje následující témata:

Požadavky

Pokud předplatné Azure ještě nemáte, napřed si vytvořte bezplatný účet.

Informace o nastavení prostředí pro vývoj bicep najdete v tématu Instalace nástrojů Bicep. Po dokončení těchto kroků budete mít Visual Studio Code a rozšíření Bicep. Máte také nejnovější Azure CLI nebo nejnovější modul Azure PowerShell.

Vytvoření jedné instance

V této části definujete soubor Bicep pro vytvoření účtu úložiště a pak nasadíte soubor Bicep. Následující části obsahují ukázky Bicep pro různé for syntaxe. Stejnou metodu nasazení můžete použít k nasazení a experimentování s těmito ukázkami. Pokud vaše nasazení selže, je to pravděpodobně jedna ze dvou příčin:

  • Název účtu úložiště je příliš dlouhý. Názvy účtů úložiště musí mít délku 3 až 24 znaků a můžou obsahovat jenom číslice a malá písmena.
  • Název účtu úložiště není jedinečný. Váš název účtu úložiště musí být jedinečný v rámci Azure.

Následující soubor Bicep definuje jeden účet úložiště:

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

Uložte soubor Bicep místně a pak pomocí Azure CLI nebo Azure PowerShell nasaďte soubor 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

Použití celočíselného indexu

Smyčka for s indexem se používá v následující ukázce k vytvoření dvou účtů úložiště:

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

Číslo indexu se používá jako součást názvu účtu úložiště. Po nasazení souboru Bicep získáte dva účty úložiště, které jsou podobné:

Použití celočíselného indexu s počátečním číslem 0

Inside range() je první číslo počátečním číslem a druhé číslo je počet spuštění smyčky. Pokud ho tedy změníte na range(3,2), získáte také dva účty úložiště:

Použití celočíselného indexu s počátečním číslem 3

Výstup předchozí ukázky ukazuje, jak odkazovat na prostředky vytvořené ve smyčce. Výstup je podobný tomuto:

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

Použití elementů pole

Můžete procházet pole ve smyčce. Následující ukázka ukazuje pole řetězců.

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

Smyčka používá všechny řetězce v poli jako součást názvů účtů úložiště. V tomto případě vytvoří dva účty úložiště:

Použití pole řetězců

Můžete také procházet pole objektů. Smyčka nejen přizpůsobí názvy účtů úložiště, ale také nakonfiguruje skladové položky.

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

Smyčka vytvoří dva účty úložiště. Skladová položka účtu úložiště s názvem začínajícím na fabrikam je Premium_LRS.

Use an array of strings

Použití pole a indexu

Ve stejných případech můžete chtít zkombinovat smyčku pole se smyčkou indexu. Následující ukázka ukazuje, jak použít pole a číslo indexu pro zásady vytváření názvů.

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

Po nasazení předchozí ukázky vytvoříte dva účty úložiště, které se podobají následujícím účtům:

Použití pole řetězců a čísla indexu

Použití objektu slovníku

K iteraci prvků v objektu slovníku použijte funkci items, která objekt převede na pole. Vlastnost použijte value k získání vlastností objektů.

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

The loop creates two storage accounts. The SKU of the storage account with the name starting with fabrikam is Premium_LRS.

Použití objektu slovníku

Smyčka s podmínkou

Pro prostředky a moduly můžete přidat if výraz se syntaxí smyčky, který kolekci podmíněně nasadí.

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

Další informace najdete v tématu Podmíněné nasazení v Nástroji Bicep.

Vyčištění prostředků

Pokud už prostředky Azure nepotřebujete, pomocí azure CLI nebo modulu Azure PowerShell odstraňte skupinu prostředků rychlého startu.

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

az group delete --name $resourceGroupName

Další kroky