Ćwiczenie — refaktoryzuj plik Bicep, aby używać modułów

Ukończone

Uwaga / Notatka

To ćwiczenie jest opcjonalne. Jeśli chcesz go ukończyć, przed rozpoczęciem potrzebujesz subskrypcji Azure. Jeśli nie masz konta Azure lub nie chcesz go teraz tworzyć, możesz zapoznać się z instrukcjami, aby zrozumieć pojęcia.

W tym ćwiczeniu zaktualizujesz utworzony wcześniej plik Bicep, aby używał modułu dla zasobów usługi Azure App Service. Moduły pomagają zachować czytelność intencji głównego pliku. Możesz ponownie użyć modułu App Service w innych plikach Bicep, jeśli zdecydujesz się to zrobić.

Podczas tego procesu wykonasz następujące czynności:

  • Dodaj nowy moduł i przenieś do niego zasoby usługi App Service.
  • Odwołaj się do modułu z głównego pliku Bicep.
  • Dodaj dane wyjściowe dla nazwy hosta aplikacji usługi App Service i emituj je z wdrożeń modułu i plików Bicep.
  • Przetestuj wdrożenie, aby upewnić się, że plik Bicep jest prawidłowy.

Dodawanie nowego pliku modułu

Utwórz samodzielny moduł dla zasobów usługi App Service:

  1. W programie Visual Studio Code utwórz nowy folder o nazwie modules w tym samym folderze, w którym utworzono plik main.bicep . W folderze modules utwórz plik o nazwie appService.bicep. Zapisz plik.

  2. Dodaj następującą zawartość do pliku appService.bicep :

    param location string
    param appServiceAppName string
    
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
    var appServicePlanName = 'toy-product-launch-plan'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2024-04-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    Zwróć uwagę, że parametry i zmienne zostały skopiowane z pliku main.bicep Bicep , ponieważ plik appService.bicep Bicep musi być samodzielny.

  3. Zapisz zmiany w pliku. Zwróć uwagę, że program Visual Studio Code nie wyświetla żadnych czerwonych zygzaków wskazujących ostrzeżenia dotyczące brakujących zmiennych, brakujących parametrów ani nieprawidłowych zasobów.

Dodaj odwołanie do modułu z nadrzędnego pliku Bicep

Po utworzeniu kompletnego modułu w celu wdrożenia zasobów usługi App Service możesz odwołać się do modułu w pliku nadrzędnym Bicep. Ponieważ moduł wdraża zasoby usługi App Service, możesz usunąć skojarzone zasoby i zmienne z pliku nadrzędnego.

  1. W pliku main.bicep usuń zasoby usługi App Service oraz definicje zmiennych appServicePlanName i appServicePlanSkuName. Nie usuwaj parametrów usługi App Service, ponieważ nadal są one potrzebne. Ponadto nie usuwaj parametrów konta magazynu, zmiennej ani zasobów.

  2. W dolnej części pliku main.bicep dodaj następujący kod Bicep :

    module appService 'modules/appService.bicep' = {
      name: 'appService'
      params: {
        location: location
        appServiceAppName: appServiceAppName
        environmentType: environmentType
      }
    }
    

    Zwróć uwagę, że określasz parametry modułu, odwołując się do parametrów w nadrzędnym pliku Bicep.

  3. Zapisz zmiany w pliku.

Dodawanie nazwy hosta jako danych wyjściowych

Uwidocznij nazwę hosta aplikacji zarówno z modułu, jak i jego pliku macierzystego:

  1. Dodaj następujący kod Bicep w dolnej części pliku appService.bicep :

    output appServiceAppHostName string = appServiceApp.properties.defaultHostName
    

    Ten kod deklaruje, że dane wyjściowe dla tego modułu, które będą mieć nazwę appServiceAppHostName, będą typu string. Dane wyjściowe będą przyjmować wartość z właściwości defaultHostName aplikacji App Service.

  2. Zapisz zmiany w pliku.

    Dane wyjściowe są deklarowane w module usługi App Service. Plik nadrzędny może odczytać go za pośrednictwem appService.outputs.appServiceAppHostName, ale nie jest automatycznie uwzględniany w danych wyjściowych wdrożenia nadrzędnego. Dodaj pasujące dane wyjściowe do pliku nadrzędnego, aby ktoś sprawdzający wdrożenie main mógł je tam pobrać. Te zwykłe, nie tajne dane wyjściowe mogą być również odczytywane z zagnieżdżonego rekordu wdrożenia modułu przez użytkownika z wymaganymi uprawnieniami odczytu wdrożenia.

  3. Otwórz plik main.bicep i dodaj następujący kod w dolnej części pliku:

    output appServiceAppHostName string = appService.outputs.appServiceAppHostName
    

    Zwróć uwagę, że te dane wyjściowe są deklarowane w podobny sposób do danych wyjściowych w module. Tym razem odwołujesz się jednak do danych wyjściowych modułu zamiast właściwości zasobu.

  4. Zapisz zmiany w pliku.

Weryfikowanie plików 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 storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

module appService 'modules/appService.bicep' = {
  name: 'appService'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

output appServiceAppHostName string = appService.outputs.appServiceAppHostName

Plik appService.bicep powinien wyglądać następująco:

param location string
param appServiceAppName string

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

var appServicePlanName = 'toy-product-launch-plan'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'

resource appServicePlan 'Microsoft.Web/serverfarms@2024-04-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

output appServiceAppHostName string = appServiceApp.properties.defaultHostName

Jeśli którykolwiek z plików Bicep nie jest zgodny, skopiuj przykład lub dostosuj swój plik, aby pasował do przykładu.

Wdrażanie zaktualizowanego pliku Bicep

Uwaga / Notatka

W tych ćwiczeniach użyj tej samej subskrypcji i grupy zasobów. Ponownie zastosuj wszystkie przesłonięcia parametrów nazwy zasobu lub lokalizacji z poprzedniego wdrożenia; w przeciwnym razie wartości domyślne w szablonie są ponownie używane.

Kontynuuj ustawianie environmentType na nonprod i używaj tej samej grupy zasobów ćwiczenia na potrzeby tego przewodnika. Wartość prod ilustruje płatną konfigurację środowiska produkcyjnego, a nie krok do uruchomienia w tych ćwiczeniach. Przed użyciem w osobnym środowisku zapoznaj się z wymaganiami wstępnymi wdrożenia produkcyjnego w temacie Wybieranie jednostek SKU dla zasobów w module Dodawanie elastyczności przy użyciu parametrów i zmiennych.

Uruchom następujące polecenie Azure CLI w terminalu.

az deployment group create \
  --resource-group "$resourceGroupName" \
  --name main \
  --template-file main.bicep \
  --parameters environmentType=nonprod

Uruchom następujące polecenie programu Azure PowerShell w terminalu.

New-AzResourceGroupDeployment `
  -ResourceGroupName $resourceGroupName `
  -Name main `
  -TemplateFile main.bicep `
  -environmentType nonprod

Sprawdź swoje wdrożenie

Upewnij się, że moduł został wdrożony i zwrócił nazwę hosta aplikacji:

  1. W przeglądarce wróć do portalu Azure. Przejdź do grupy zasobów i otwórz pozycję Wdrożenia.

  2. Znajdź wdrożenie main i zagnieżdżone wdrożenie appService. Pomyślne uruchomienie powoduje utworzenie lub zaktualizowanie tych nazwanych wpisów. Inne wdrożenia mogą być również wymienione.

    Zrzut ekranu przedstawiający historię wdrażania w portalu Azure z pomyślnymi wdrożeniami głównym i appService.

  3. Wybierz wdrożenie o nazwie main. Upewnij się, że jego najnowsza operacja zakończyła się pomyślnie i odpowiada poleceniu, które właśnie uruchomiono, a następnie wybierz pozycję Szczegóły wdrożenia, aby rozwinąć listę wdrożonych zasobów.

    Zwróć uwagę, że nasze wdrożenie modułu jest wyświetlane na liście.

    Zrzut ekranu przedstawiający szczegóły wdrożenia w portalu Azure z wyszczególnionym modułem App Service.

  4. Wybierz kartę Dane wyjściowe . Zwróć uwagę, że istnieje dane wyjściowe o nazwie appServiceAppHostName z nazwą hosta aplikacji usługi App Service. Skopiuj nazwę hosta do schowka.

    Zrzut ekranu przedstawiający dane wyjściowe wdrożenia portalu Azure z nazwą hosta aplikacji usługi App Service.

  5. Otwórz nową kartę przeglądarki i wklej skopiowaną nazwę hosta. Powinna zostać wyświetlona domyślna strona powitalna usługi App Service.

    Zrzut ekranu przedstawiający domyślną stronę powitalną aplikacji Azure App Service.

Gratulacje! Pomyślnie wdrożono podstawy dla doskonałej aplikacji.