Szybki start: tworzenie wielu wystąpień zasobów w środowisku Bicep
Dowiedz się, jak używać różnych for
składni do tworzenia wielu wystąpień zasobów w środowisku Bicep. Mimo że w tym artykule pokazano tylko tworzenie wielu wystąpień zasobów, te same metody mogą służyć do definiowania kopii modułu, zmiennej, właściwości lub danych wyjściowych. Aby dowiedzieć się więcej, zobacz Pętle Bicep.
Ten artykuł zawiera następujące tematy:
- korzystanie z indeksu liczb całkowitych
- używanie elementów tablicy
- używanie tablicy i indeksu
- używanie obiektu słownika
- pętla z warunkiem
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Aby skonfigurować środowisko na potrzeby programowania aplikacji Bicep, zobacz Instalowanie narzędzi Bicep. Po wykonaniu tych kroków będziesz mieć program Visual Studio Code i rozszerzenie Bicep. Masz również najnowszy interfejs wiersza polecenia platformy Azure lub najnowszy moduł programu Azure PowerShell.
Tworzenie pojedynczego wystąpienia
W tej sekcji zdefiniujesz plik Bicep na potrzeby tworzenia konta magazynu, a następnie wdrożysz plik Bicep. Kolejne sekcje zawierają przykłady Bicep dla różnych for
składni. Możesz użyć tej samej metody wdrażania, aby wdrożyć i eksperymentować z tymi przykładami. Jeśli wdrożenie zakończy się niepowodzeniem, prawdopodobnie jest to jedna z dwóch przyczyn:
- Nazwa konta magazynu jest za długa. Nazwy kont usługi Storage muszą mieć długość od 3 do 24 znaków i mogą zawierać tylko cyfry i małe litery.
- Nazwa konta magazynu nie jest unikatowa. Nazwa konta magazynu musi być unikatowa w obrębie platformy Azure.
Następujący plik Bicep definiuje jedno konto magazynu:
param rgLocation string = resourceGroup().location
resource createStorage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'storage${uniqueString(resourceGroup().id)}'
location: rgLocation
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
Zapisz plik Bicep lokalnie, a następnie w celu wdrożenia pliku Bicep użyj interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell:
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
Korzystanie z indeksu liczb całkowitych
Pętla for z indeksem jest używana w poniższym przykładzie do tworzenia dwóch kont magazynu:
param rgLocation string = resourceGroup().location
param storageCount int = 2
resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-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
} ]
Numer indeksu jest używany jako część nazwy konta magazynu. Po wdrożeniu pliku Bicep uzyskasz dwa konta magazynu podobne do następujących:
Wewnątrz zakresu() pierwsza liczba jest liczbą początkową, a druga liczba to liczba, ile razy pętla zostanie uruchomiona. Jeśli więc zmienisz go na zakres (3,2), otrzymasz również dwa konta magazynu:
Dane wyjściowe powyższego przykładu pokazują, jak odwoływać się do zasobów utworzonych w pętli. Dane wyjściowe są podobne do następujących:
"outputs": {
"names": {
"type": "Array",
"value": [
{
"name": "0storage52iyjssggmvue"
},
{
"name": "1storage52iyjssggmvue"
}
]
}
},
Używanie elementów tablicy
Możesz przechodzić w pętli przez tablicę. Poniższy przykład przedstawia tablicę ciągów.
param rgLocation string = resourceGroup().location
param storageNames array = [
'contoso'
'fabrikam'
]
resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for name in storageNames: {
name: '${name}str${uniqueString(resourceGroup().id)}'
location: rgLocation
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
Pętla używa wszystkich ciągów w tablicy jako części nazw kont magazynu. W takim przypadku tworzy dwa konta magazynu:
Można również przechodzić w pętli przez tablicę obiektów. Pętla nie tylko dostosowuje nazwy kont magazynu, ale także konfiguruje jednostki SKU.
param rgLocation string = resourceGroup().location
param storages array = [
{
name: 'contoso'
skuName: 'Standard_LRS'
}
{
name: 'fabrikam'
skuName: 'Premium_LRS'
}
]
resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for storage in storages: {
name: '${storage.name}obj${uniqueString(resourceGroup().id)}'
location: rgLocation
sku: {
name: storage.skuName
}
kind: 'StorageV2'
}]
Pętla tworzy dwa konta magazynu. Jednostka SKU konta magazynu o nazwie rozpoczynającej się od fabrikam jest Premium_LRS.
Korzystanie z tablicy i indeksu
W takich samych przypadkach możesz połączyć pętlę tablicy z pętlą indeksu. W poniższym przykładzie pokazano, jak używać tablicy i numeru indeksu dla konwencji nazewnictwa.
param rgLocation string = resourceGroup().location
param storageNames array = [
'contoso'
'fabrikam'
]
resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for (name, i) in storageNames: {
name: '${i}${name}${uniqueString(resourceGroup().id)}'
location: rgLocation
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
Po wdrożeniu poprzedniego przykładu utworzysz dwa konta magazynu podobne do następujących:
Korzystanie z obiektu słownika
Aby iterować elementy w obiekcie słownika, użyj funkcji items, która konwertuje obiekt na tablicę. value
Użyj właściwości , aby uzyskać właściwości obiektów.
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@2023-04-01' = [for config in items(storageConfig): {
name: '${config.value.name}${uniqueString(resourceGroup().id)}'
location: rgLocation
sku: {
name: config.value.skuName
}
kind: 'StorageV2'
}]
Pętla tworzy dwa konta magazynu. Jednostka SKU konta magazynu o nazwie rozpoczynającej się od fabrikam jest Premium_LRS.
Pętla z warunkiem
W przypadku zasobów i modułów można dodać if
wyrażenie ze składnią pętli w celu warunkowego wdrożenia kolekcji.
param rgLocation string = resourceGroup().location
param storageCount int = 2
param createNewStorage bool = true
resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-01' = [for i in range(0, storageCount): if(createNewStorage) {
name: '${i}storage${uniqueString(resourceGroup().id)}'
location: rgLocation
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}]
Aby uzyskać więcej informacji, zobacz wdrażanie warunkowe w aplikacji Bicep.
Czyszczenie zasobów
Gdy zasoby platformy Azure nie są już potrzebne, użyj interfejsu wiersza polecenia platformy Azure lub modułu Azure PowerShell, aby usunąć grupę zasobów szybkiego startu.
resourceGroupName = "{provide-the-resource-group-name}"
az group delete --name $resourceGroupName