Nasazení více prostředků pomocí smyček

Dokončeno

Často potřebujete nasadit více prostředků, které jsou velmi podobné. Přidáním smyček do souborů Bicep se můžete vyhnout opakování definic prostředků. Místo toho můžete dynamicky nastavit počet instancí prostředku, který chcete nasadit. Vlastnosti pro každou instanci můžete dokonce přizpůsobit.

Pro vaši společnost toy musíte nasadit back-endovou infrastrukturu, včetně některých logických serverů Azure SQL, aby podporovala spuštění nového inteligentního medvěda teddy. Musíte nasadit vyhrazený logický server do každé země nebo oblasti, kde bude tok k dispozici, abyste byli v souladu se zákony o ochraně dat v jednotlivých zemích nebo oblastech.

Kromě jejich umístění budou všechny logické servery nakonfigurované stejným způsobem. K nasazení logických serverů chcete použít kód Bicep a parametr by vám měl umožnit zadat oblasti, do kterých se mají logické servery nasadit.

V této lekci se dozvíte, jak nasadit více instancí prostředků pomocí smyček kopírování.

Poznámka:

Příkazy v této lekci jsou znázorněny pro ilustraci konceptů. Zatím nespouštět příkazy. Brzy si procvičíte, co se tady naučíte.

Použití smyček kopírování

Když v šabloně Bicep definujete prostředek nebo modul, můžete k vytvoření smyčky použít for klíčové slovo. for Umístěte klíčové slovo do deklarace prostředku a určete, jak má Bicep identifikovat každou položku ve smyčce. Obvykle smyčka přes pole objektů vytvořit více instancí prostředku. Následující příklad nasadí více účtů úložiště a jejich názvy se zadají jako hodnoty parametrů:

param storageAccountNames array = [
  'saauditus'
  'saauditeurope'
  'saauditapac'
]

resource storageAccountResources 'Microsoft.Storage/storageAccounts@2021-09-01' = [for storageAccountName in storageAccountNames: {
  name: storageAccountName
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

V tomto příkladu smyčka iteruje každou položku v storageAccountNames poli. Pokaždé, když Bicep prochází smyčkou, umístí aktuální hodnotu do speciální proměnné s názvem storageAccountNamea použije se jako hodnota name vlastnosti. Všimněte si, že Bicep vyžaduje, abyste za definici prostředku umístili počáteční závorku ([) znak for klíčového slova a pravou závorku (]).

Pokud jste tento soubor Bicep nasadili, uvidíte, že byly vytvořeny tři účty úložiště s jejich názvy zadanými odpovídajícími položkami v storageAccountNames poli.

Smyčka založená na počtu

Někdy může být potřeba vytvořit určitý počet prostředků a jako zdroj nemusíte používat pole. Bicep poskytuje range() funkci, která vytvoří matici čísel. Pokud například potřebujete vytvořit čtyři účty úložiště volané sa1 prostřednictvím sa4, můžete použít definici prostředku takto:

resource storageAccountResources 'Microsoft.Storage/storageAccounts@2021-09-01' = [for i in range(1,4): {
  name: 'sa${i}'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

Při použití range() funkce zadáte počáteční hodnotu a počet hodnot, které chcete vytvořit. Například pokud chcete vytvořit účty úložiště s názvy sa0, sa1a sa2, byste použili funkci range(0,3).

Poznámka:

Při použití range() funkce zadáte dva argumenty. První určuje počáteční hodnotu a druhý řekne Bicep požadovaný počet hodnot. Pokud například použijete range(3,4) , vrátí Funkce Bicep hodnoty 3, 4, 5a 6. Ujistěte se, že požadujete správný počet hodnot, zejména pokud používáte počáteční hodnotu 0.

Přístup k indexu iterace

Pomocí bicep můžete iterovat pole a načíst index aktuálního prvku v poli. Řekněme například, že chcete vytvořit logický server v každém umístění určeném polem a chcete, aby názvy serverů byly sqlserver-1, sqlserver-2a tak dále. Toho můžete dosáhnout pomocí následujícího kódu Bicep:

param locations array = [
  'westeurope'
  'eastus2'
  'eastasia'
]

resource sqlServers 'Microsoft.Sql/servers@2021-11-01-preview' = [for (location, i) in locations: {
  name: 'sqlserver-${i+1}'
  location: location
  properties: {
    administratorLogin: administratorLogin
    administratorLoginPassword: administratorLoginPassword
  }
}]

Všimněte si, že name vlastnost obsahuje výraz i+1. První hodnota proměnné indexu i je nula, takže do ní musíte přidat +1 , pokud chcete, aby názvy serverů začínaly 1.

Tip

V tomto příkladu jsme pojmenovali proměnnou iindexu . Toto je standardní konvence v Bicep. Můžete ale použít libovolný název.

Filtrování položek pomocí smyček

V některých situacích můžete chtít nasadit prostředky pomocí smyček kopírování v kombinaci s podmínkami. Můžete to provést kombinací klíčových if slov a for klíčových slov.

V následujícím příkladu kód pomocí parametru pole definuje sadu logických serverů. Podmínka se používá se smyčkou kopírování k nasazení serverů pouze v případech, environmentName kdy se vlastnost objektu smyčky Productionrovná:

param sqlServerDetails array = [
  {
    name: 'sqlserver-we'
    location: 'westeurope'
    environmentName: 'Production'
  }
  {
    name: 'sqlserver-eus2'
    location: 'eastus2'
    environmentName: 'Development'
  }
  {
    name: 'sqlserver-eas'
    location: 'eastasia'
    environmentName: 'Production'
  }
]

resource sqlServers 'Microsoft.Sql/servers@2021-11-01-preview' = [for sqlServer in sqlServerDetails: if (sqlServer.environmentName == 'Production') {
  name: sqlServer.name
  location: sqlServer.location
  properties: {
    administratorLogin: administratorLogin
    administratorLoginPassword: administratorLoginPassword
  }
  tags: {
    environment: sqlServer.environmentName
  }
}]

Pokud jste nasadili předchozí příklad, zobrazili byste dva logické servery, sqlserver-we ale sqlserver-easne sqlserver-eus2, protože vlastnost objektu environmentName neodpovídá Production.