Nasazení více prostředků pomocí smyček
Č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 storageAccountName
a 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
, sa1
a 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
, 5
a 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-2
a 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 i
indexu . 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 Production
rovná:
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-eas
ne sqlserver-eus2
, protože vlastnost objektu environmentName
neodpovídá Production
.