Ćwiczenie — dodawanie parametrów i zmiennych do szablonu Bicep

Ukończone

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

  1. 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 na westus3wartość . Zwykle zasoby są tworzone w tej samej lokalizacji co grupa zasobów przy użyciu resourceGroup().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.

  2. Znajdź miejsca w definicjach zasobów, w których location ustawiono właściwości i name , 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
      }
    }
    
  3. Zapisz zmiany w pliku.

Automatyczne ustawianie jednostek SKU dla każdego typu środowiska

  1. 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.

  2. 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ę.

  3. 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.

  4. 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

  1. 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.

  2. Wybierz link 1 Powodzenie.

  3. Wybierz wdrożenie o nazwie main, a następnie wybierz pozycję Szczegóły wdrożenia, aby rozwinąć listę wdrożonych zasobów.

    Zrzut ekranu przedstawiający interfejs witryny Azure Portal dla określonego wdrożenia z kontem magazynu i zasobami usługi App Service wymienionymi na liście z wygenerowanymi nazwami.

  4. Zauważ, że nowa aplikacja usługi App Service i konto magazynu zostały wdrożone z losowo wygenerowanymi nazwami.