Ćwiczenie — dodawanie parametrów i zmiennych do szablonu Bicep
W tym ćwiczeniu zaktualizujesz wcześniej utworzony szablon Bicep, tak aby był to:\
- Akceptuje parametry lokalizacji zasobów i nazw.
- Używa reguł biznesowych do wybierania odpowiednich jednostek SKU dla wdrażanych zasobów.
Podczas tego procesu wykonasz następujące czynności:
- Zaktualizuj szablon, aby zawierał
location
parametr. - Zaktualizuj szablon, aby zawierał parametry i zmienne dla nazw zasobów.
- Użyj wyrażeń, aby ustawić wartości domyślne parametrów.
- Zaktualizuj szablon, aby zawierał zmienne dla jednostki SKU każdego zasobu.
- Przetestuj wdrożenie, aby upewnić się, że szablon jest prawidłowy.
Dodawanie parametrów lokalizacji i nazwy zasobu
W pliku main.bicep w programie Visual Studio Code dodaj następujący kod na początku pliku:
param location string = 'eastus' param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}' param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}' var appServicePlanName = 'toy-product-launch-plan'
Linter Bicep dodaje żółte linie zquiggly pod każdym parametrem i nazwą zmiennej, aby wskazać, że nie są używane w szablonie. Wkrótce rozwiążesz ten problem.
Zwróć uwagę, że używasz wyrażeń zawierających interpolację ciągów i
uniqueString()
funkcję do definiowania domyślnych wartości parametrów. Osoba wdrażająca ten szablon może zastąpić domyślne wartości parametrów, określając wartości w czasie wdrażania, ale nie może zastąpić wartości zmiennych.Zwróć również uwagę, że używasz zmiennej dla nazwy planu usługi aplikacja systemu Azure, ale używasz parametrów dla innych nazw. Konta magazynu i aplikacje usługi App Service wymagają globalnie unikatowych nazw, ale nazwy planów usługi App Service muszą być unikatowe tylko w ramach grupy zasobów. Ta różnica oznacza, że nie ma problemu z używaniem tej samej nazwy planu usługi App Service w różnych wdrożeniach, o ile wszystkie wdrożenia przechodzą do różnych grup zasobów.
Napiwek
Określasz, że
location
parametr powinien być ustawiony nawestus3
wartość . Zwykle zasoby są tworzone w tej samej lokalizacji co grupa zasobów przy użyciuresourceGroup().location
właściwości . Jednak podczas pracy z piaskownicą usługi Microsoft Learn musisz użyć niektórych regionów platformy Azure, które nie są zgodne z lokalizacją grupy zasobów.Znajdź miejsca w definicjach zasobów, w których
location
ustawiono właściwości iname
, i zaktualizuj je, aby używały wartości parametrów. Po zakończeniu definicje zasobów w pliku Bicep powinny wyglądać następująco:resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: 'Standard_LRS' } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: 'F1' } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
Zapisz zmiany w pliku.
Automatyczne ustawianie jednostek SKU dla każdego typu środowiska
W pliku main.bicep w programie Visual Studio Code dodaj następujący parametr Bicep poniżej parametrów utworzonych w poprzednim zadaniu:
@allowed([ 'nonprod' 'prod' ]) param environmentType string
Zwróć uwagę, że definiujesz parametr z zestawem dozwolonych wartości, ale nie określasz wartości domyślnej dla tego parametru.
Poniżej wiersza, który deklaruje zmienną
appServicePlanName
, dodaj następujące definicje zmiennych:var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
Zwróć uwagę, że ustawiasz te wartości zmiennych przy użyciu operatoraternary, aby wyrazić pewną
if/then/else
logikę.Znajdź miejsca w definicjach zasobów, w których
sku
są ustawiane właściwości, i aktualizuj je, aby używać wartości parametrów. Po zakończeniu definicje zasobów w pliku Bicep powinny wyglądać następująco:resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: storageAccountSkuName } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
Zwróć uwagę, że nie sparametryzował wszystkiego. Niektóre właściwości zostały ustawione bezpośrednio w definicjach zasobów, w których wiadomo, że te wartości nie zmienią się między wdrożeniami.
Zapisz zmiany w pliku.
Weryfikowanie pliku Bicep
Po zakończeniu wszystkich powyższych zmian plik main.bicep powinien wyglądać następująco:
param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
@allowed([
'nonprod'
'prod'
])
param environmentType string
var appServicePlanName = 'toy-product-launch-plan'
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSkuName
}
}
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
Jeśli plik nie jest zgodny, skopiuj przykład lub dostosuj plik, aby był zgodny z przykładem.
Wdrażanie zaktualizowanego szablonu Bicep
Uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure w terminalu.
az deployment group create \
--template-file main.bicep \
--parameters environmentType=nonprod
Uruchom następujące polecenie programu Azure PowerShell w terminalu.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-environmentType nonprod
Zwróć uwagę, że jawnie określasz wartość parametru environmentType
podczas wykonywania wdrożenia. Nie musisz określać innych wartości parametrów, ponieważ mają prawidłowe wartości domyślne.
Sprawdzanie wdrożenia
W przeglądarce wróć do witryny Azure Portal i przejdź do grupy zasobów. Nadal zobaczysz jedno pomyślne wdrożenie, ponieważ wdrożenie używało tej samej nazwy co pierwsze wdrożenie.
Wybierz link 1 Powodzenie.
Wybierz wdrożenie o nazwie main, a następnie wybierz pozycję Szczegóły wdrożenia, aby rozwinąć listę wdrożonych zasobów.
Zauważ, że nowa aplikacja usługi App Service i konto magazynu zostały wdrożone z losowo wygenerowanymi nazwami.