Szybki start: tworzenie wielu wystąpień zasobów w aplikacji Bicep

Dowiedz się, jak używać różnych for składni do tworzenia wielu wystąpień zasobów w aplikacji 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:

Wymagania wstępne

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Aby skonfigurować środowisko do tworzenia aplikacji Bicep, zobacz Instalowanie narzędzi Bicep. Po wykonaniu tych kroków będziesz mieć Visual Studio Code i rozszerzenie Bicep. Masz również najnowszy interfejs wiersza polecenia platformy Azure lub najnowszy moduł 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@2022-09-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

Zapisz plik Bicep lokalnie, a następnie użyj interfejsu wiersza polecenia platformy Azure lub Azure PowerShell, aby wdrożyć plik 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

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

Numer indeksu jest używany jako część nazwy konta magazynu. Po wdrożeniu pliku Bicep uzyskasz dwa konta magazynu podobne do następujących:

Użyj indeksu liczb całkowitych z 0 jako numerem początkowym

Wewnątrz zakresu() pierwsza liczba jest liczbą początkową, a druga liczba jest liczbą, ile razy pętla zostanie uruchomiona. Dlatego jeśli zmienisz go na zakres (3,2), otrzymasz również dwa konta magazynu:

Użyj indeksu liczb całkowitych z 3 jako numerem początkowym

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żna przechodzić w pętli za pośrednictwem tablicy. Poniższy przykład przedstawia tablicę ciągów.

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

Pętla używa wszystkich ciągów w tablicy jako części nazw kont magazynu. W takim przypadku tworzy dwa konta magazynu:

Używanie tablicy ciągów

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@2022-09-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.

Używanie tablicy ciągów

Korzystanie z tablicy i indeksu

W takich samych przypadkach warto 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@2022-09-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, które są podobne do następujących:

Używanie tablicy ciągów i numeru indeksu

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 pobrać 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@2022-09-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.

Używanie obiektu słownika

Pętla z warunkiem

W przypadku zasobów i modułów można dodać if wyrażenie ze składnią pętli, aby warunkowo wdrożyć kolekcję.

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

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

Następne kroki