Ćwiczenie — warunkowe wdrażanie zasobów

Ukończone

Uwaga

Po pierwszym aktywowaniu piaskownicy i zaakceptowaniu warunków twoje konto Microsoft jest skojarzone z nowym katalogiem platformy Azure o nazwie Microsoft Learn Sandbox. Dodano cię również do specjalnej subskrypcji o nazwie Subskrypcja Concierge.

Musisz wdrożyć zasoby firmy toy w różnych środowiskach i chcesz użyć parametrów i warunków, aby kontrolować, co jest wdrażane w każdym środowisku.

W tym ćwiczeniu utworzysz serwer logiczny usługi Azure SQL i bazę danych. Następnie dodasz ustawienia inspekcji, aby upewnić się, że inspekcja jest włączona, ale chcesz ją włączyć tylko podczas wdrażania w środowisku produkcyjnym. Do celów inspekcji musisz mieć konto magazynu, które będzie również wdrażane tylko podczas wdrażania zasobów w środowisku produkcyjnym.

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

  • Utwórz plik Bicep definiujący serwer logiczny z bazą danych.
  • Dodaj konto magazynu i ustawienia inspekcji SQL, z których każde jest wdrażane z warunkiem.
  • Skonfiguruj infrastrukturę dla środowiska deweloperskiego, a następnie zweryfikuj wynik.
  • Ponownie wdróż infrastrukturę w środowisku produkcyjnym, a następnie przyjrzyj się zmianom.

W tym ćwiczeniu jest używane rozszerzenie Bicep dla programu Visual Studio Code. Pamiętaj, aby zainstalować to rozszerzenie w programie Visual Studio Code.

Tworzenie szablonu Bicep z serwerem logicznym i bazą danych

  1. Otwórz Visual Studio Code.

  2. Utwórz nowy plik o nazwie main.bicep.

  3. Zapisz pusty plik, aby program Visual Studio Code ładował narzędzia Bicep.

    Możesz wybrać pozycję Plik>Zapisz jako lub wybrać Ctrl+S w systemie Windows (⌘+S w systemie macOS). Pamiętaj, gdzie został zapisany plik. Na przykład możesz utworzyć folder szablonów , aby go zapisać.

  4. Aby zdefiniować serwer logiczny i bazę danych, dodaj następującą zawartość do pliku wraz z parametrami i zmiennymi, których potrzebują te zasoby. Wprowadź zawartość samodzielnie zamiast kopiować i wklejać, aby zobaczyć, jak narzędzia ułatwiają pisanie plików Bicep.

    @description('The Azure region into which the resources should be deployed.')
    param location string
    
    @secure()
    @description('The administrator login username for the SQL server.')
    param sqlServerAdministratorLogin string
    
    @secure()
    @description('The administrator login password for the SQL server.')
    param sqlServerAdministratorLoginPassword string
    
    @description('The name and tier of the SQL database SKU.')
    param sqlDatabaseSku object = {
      name: 'Standard'
      tier: 'Standard'
    }
    
    var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
    var sqlDatabaseName = 'TeddyBear'
    
    resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = {
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdministratorLogin
        administratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }
    
    resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: sqlDatabaseSku
    }
    

    Zwróć uwagę, że wszystkie parametry obejmują @description dekoratory, które ułatwiają pracę z nimi. Zwróć również uwagę, że sqlServerAdministratorLogin parametry i sqlServerAdministratorLoginPassword mają @secure zastosowany dekorator. Informuje to Bicep, że te wartości parametrów są wrażliwe. Platforma Azure nie wyświetla poufnych wartości w dziennikach.

Dodawanie konta magazynu

W ustawieniach inspekcji dla serwerów logicznych należy określić konto magazynu, które będzie zawierać dane inspekcji. Zaktualizujesz plik Bicep, aby utworzyć to konto magazynu, ale tylko wtedy, gdy inspekcja zostanie włączona.

  1. Poniżej deklaracji parametrów dodaj następujące parametry:

    @description('The name of the environment. This must be Development or Production.')
    @allowed([
      'Development'
      'Production'
    ])
    param environmentName string = 'Development'
    
    @description('The name of the audit storage account SKU.')
    param auditStorageAccountSkuName string = 'Standard_LRS'
    
  2. Poniżej deklaracji zmiennych dodaj następujące zmienne:

    var auditingEnabled = environmentName == 'Production'
    var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
    

    Zwróć uwagę, że tworzysz zmienną o nazwie auditingEnabled, która będzie używana jako warunek wdrażania zasobów inspekcji. Podczas tworzenia zmiennej takiej jak ta kod Bicep jest jaśniejszy i łatwiejszy do odczytania. Każdy, kto patrzy na warunki zasobów, zrozumie, co się dzieje.

    Zwróć również uwagę, że zmienna auditStorageAccountName używa funkcji o nazwie take(). Nazwy kont magazynu mają maksymalną długość 24 znaków, więc ta funkcja przycina koniec ciągu, aby upewnić się, że nazwa jest prawidłowa.

  3. W dolnej części pliku poniżej zasobów dodaj następującą definicję zasobu dla konta magazynu:

    resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
      name: auditStorageAccountName
      location: location
      sku: {
        name: auditStorageAccountSkuName
      }
      kind: 'StorageV2'  
    }
    

    Zwróć uwagę, że definicje konta magazynu zawierają if słowo kluczowe, które określa warunek wdrożenia.

Dodawanie ustawień inspekcji

  1. Poniżej właśnie dodanego zasobu konta magazynu dodaj następujące elementy:

    resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2024-05-01-preview' = if (auditingEnabled) {
      parent: sqlServer
      name: 'default'
      properties: {
        state: 'Enabled'
        storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
        storageAccountAccessKey: environmentName == 'Production' ? auditStorageAccount.listKeys().keys[0].value : ''
      }
    }
    

    Zwróć uwagę, że definicja zawiera ten sam if warunek co konto magazynu. storageEndpoint Ponadto właściwości i storageAccountAccessKey używają operatora znak zapytania (?)ternary, aby upewnić się, że ich wartości są zawsze prawidłowe. Jeśli tego nie zrobisz, usługa Azure Resource Manager oblicza wartości wyrażeń, zanim oceni warunek wdrożenia zasobu i zwróci błąd, ponieważ nie można odnaleźć konta magazynu.

  2. Zapisz zmiany w pliku.

Weryfikowanie pliku Bicep

Po zakończeniu wszystkich powyższych zmian plik Bicep powinien wyglądać następująco:

@description('The Azure region into which the resources should be deployed.')
param location string

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
  name: 'Standard'
  tier: 'Standard'
}

@description('The name of the environment. This must be Development or Production.')
@allowed([
  'Development'
  'Production'
])
param environmentName string = 'Development'

@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'

var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)

resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: sqlDatabaseSku
}

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: auditStorageAccountSkuName
  }
  kind: 'StorageV2'  
}

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2024-05-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? auditStorageAccount.listKeys().keys[0].value : ''
  }
}

Jeśli tak nie jest, skopiuj przykład lub dostosuj szablon tak, aby był zgodny z przykładem.

Wdrażanie szablonu Bicep na platformie Azure

Aby wdrożyć ten szablon na platformie Azure, musisz zalogować się na konto platformy Azure z poziomu terminalu programu Visual Studio Code. Upewnij się, że zainstalowano interfejs wiersza polecenia platformy Azure i pamiętaj, aby zalogować się przy użyciu tego samego konta, które zostało użyte do aktywowania piaskownicy.

  1. W menu Terminal wybierz polecenie New Terminal (Nowy terminal). Okno terminalu zwykle otwiera się w dolnej połowie ekranu.

  2. Jeśli w oknie terminalu jest wyświetlana powłoka bash po prawej stronie, oznacza to, że prawidłowa powłoka jest już otwarta. Alternatywnie, jeśli po prawej stronie zostanie wyświetlona ikona powłoki bash, możesz ją wybrać, aby uruchomić powłokę.

    Zrzut ekranu przedstawiający okno terminalu programu Visual Studio Code z wyświetloną opcją powłoki Bash.

    Jeśli zostanie wyświetlona powłoka inna niż powłoka bash , wybierz strzałkę listy rozwijanej powłoki, a następnie wybierz pozycję Git Bash.

    Zrzut ekranu przedstawiający okno terminalu programu Visual Studio Code z wyświetloną listą rozwijaną powłoki terminalu i wybraną pozycją Domyślna powłoka Git Bash.

  3. W terminalu przejdź do katalogu, w którym zapisano szablon. Jeśli na przykład szablon został zapisany w folderze templates , możesz użyć następującego polecenia:

    cd templates
    

Instalowanie aplikacji Bicep

Uruchom następujące polecenie, aby upewnić się, że masz najnowszą wersję aplikacji Bicep:

az bicep install && az bicep upgrade

Logowanie się do platformy Azure

  1. W terminalu programu Visual Studio Code zaloguj się do platformy Azure, uruchamiając następujące polecenie:

    az login
    
  2. W przeglądarce, która zostanie otwarta, zaloguj się do konta platformy Azure. W terminalu programu Visual Studio Code zostanie wyświetlona lista subskrypcji skojarzonych z tym kontem. Wybierz subskrypcję o nazwie Subskrypcja Concierge.

    Jeśli ostatnio użyto więcej niż jednej piaskownicy, terminal może wyświetlić więcej niż jedno wystąpienie subskrypcji Concierge. W tym przypadku użyj dwóch następnych kroków, aby ustawić jedną jako domyślną subskrypcję.

    1. Pobierz identyfikatory subskrypcji Concierge.

        az account list \
         --refresh \
         --query "[?contains(name, 'Concierge Subscription')].id" \
         --output table
      
    2. Ustaw domyślną subskrypcję przy użyciu identyfikatora subskrypcji. Zastąp ciąg {your subscription ID} najnowszym identyfikatorem subskrypcji Concierge.

      az account set --subscription {your subscription ID}
      

Ustawianie domyślnej grupy zasobów

W przypadku korzystania z interfejsu wiersza polecenia platformy Azure możesz ustawić domyślną grupę zasobów i pominąć parametr z pozostałych poleceń interfejsu wiersza polecenia platformy Azure w tym ćwiczeniu. Ustaw wartość domyślną na grupę zasobów utworzoną dla Ciebie w środowisku piaskownicy.

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

Wdrażanie szablonu na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure

W terminalu programu Visual Studio Code wdróż szablon Bicep na platformie Azure, uruchamiając następujący kod. Zwróć uwagę, że jawnie ustawiasz location parametr na westus3.

az deployment group create --name main --template-file main.bicep --parameters location=westus3

Aby wdrożyć ten szablon na platformie Azure, zaloguj się do konta platformy Azure z poziomu terminalu programu Visual Studio Code. Upewnij się, że zainstalowano program Azure PowerShell i zaloguj się do tego samego konta, na którym aktywowano piaskownicę.

  1. W menu Terminal wybierz polecenie New Terminal (Nowy terminal). Okno terminalu zwykle otwiera się w dolnej połowie ekranu.

  2. Jeśli w oknie terminalu jest wyświetlany program pwsh lub powershell po prawej stronie, oznacza to, że prawidłowa powłoka jest już otwarta. Alternatywnie, jeśli po prawej stronie zostanie wyświetlona ikona powłoki programu PowerShell, możesz ją wybrać, aby uruchomić powłokę.

    Zrzut ekranu przedstawiający okno terminalu programu Visual Studio Code z opcją pwsh wyświetlaną na liście rozwijanej powłoki.

    Jeśli zostanie wyświetlona powłoka inna niż pwsh lub powershell , wybierz strzałkę listy rozwijanej powłoki, a następnie wybierz pozycję PowerShell.

    Zrzut ekranu przedstawiający okno terminalu programu Visual Studio Code z wyświetloną listą rozwijaną powłoki terminalu i wybraną pozycją Programu PowerShell.

  3. W terminalu przejdź do katalogu, w którym zapisano szablon. Jeśli na przykład szablon został zapisany w folderze templates , możesz użyć tego polecenia:

    Set-Location -Path templates
    

Instalowanie interfejsu wiersza polecenia Bicep

Aby użyć aplikacji Bicep z poziomu programu Azure PowerShell, zainstaluj interfejs wiersza polecenia Bicep.

Logowanie się na platformie Azure przy użyciu programu Azure PowerShell

  1. W terminalu programu Visual Studio Code uruchom następujące polecenie:

    Connect-AzAccount
    

    Zostanie otwarta przeglądarka umożliwiająca zalogowanie się do konta platformy Azure. Przeglądarka może zostać otwarta w tle.

  2. Po zalogowaniu się na platformie Azure w terminalu zostanie wyświetlona lista subskrypcji skojarzonych z tym kontem. Jeśli aktywowano piaskownicę, zostanie wyświetlona subskrypcja o nazwie Subskrypcja Concierge. Wybierz go w pozostałej części ćwiczenia.

    Jeśli ostatnio użyto więcej niż jednej piaskownicy, terminal może wyświetlić więcej niż jedno wystąpienie subskrypcji Concierge. W tym przypadku użyj dwóch następnych kroków, aby ustawić jedną jako domyślną subskrypcję.

    1. Uzyskaj identyfikator subskrypcji. Uruchomienie następującego polecenia zawiera listę subskrypcji i ich identyfikatorów. Concierge SubscriptionWyszukaj ciąg , a następnie skopiuj identyfikator z drugiej kolumny. Wygląda to mniej więcej tak: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

      Get-AzSubscription
      
    2. Zmień aktywną subskrypcję na Subskrypcja Concierge. Pamiętaj, aby zastąpić ciąg {Identyfikator subskrypcji} skopiowaną wartością.

      $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
      Set-AzContext $context
      

Ustawianie domyślnej grupy zasobów

Możesz ustawić domyślną grupę zasobów i pominąć parametr z pozostałych poleceń programu Azure PowerShell w tym ćwiczeniu. Ustaw tę wartość domyślną na grupę zasobów utworzoną dla Ciebie w środowisku piaskownicy.

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

Wdrażanie szablonu na platformie Azure przy użyciu programu Azure PowerShell

W terminalu programu Visual Studio Code wdróż szablon na platformie Azure, uruchamiając następujące polecenie programu Azure PowerShell. Ukończenie tego procesu może potrwać kilka minut, a następnie wdrożenie zakończy się pomyślnie.

New-AzResourceGroupDeployment -Name main -TemplateFile main.bicep -location westus3

Podczas wykonywania wdrożenia zostanie wyświetlony monit o wprowadzenie wartości parametrów sqlServerAdministratorLogin i .sqlServerAdministratorLoginPassword

Napiwek

Po wprowadzeniu bezpiecznych parametrów wybrane wartości muszą być zgodne z określonymi regułami:

  • sqlServerAdministratorLogin nie może być łatwą do odgadnięcia nazwą logowania, taką jak admin lub root. Może zawierać tylko znaki alfanumeryczne i musi zaczynać się literą.
  • sqlServerAdministratorLoginPassword musi zawierać co najmniej osiem znaków i zawierać małe litery, wielkie litery, cyfry i symbole. Aby uzyskać więcej informacji na temat złożoności hasła, zobacz zasady Usługi SQL Azure haseł.

Jeśli wartości parametrów nie spełniają wymagań, usługa Azure SQL nie wdroży serwera logicznego.

Pamiętaj również o zanotowaniu wprowadzonego identyfikatora logowania i hasła. Wkrótce użyjesz ich ponownie.

Ponieważ nie określono wartości parametru environmentName , używana jest wartość domyślna Development .

Poczekaj na zakończenie wdrożenia. Jeśli wdrożenie zakończy się niepowodzeniem z komunikatem informującym, że lokalizacja nie akceptuje tworzenia nowych serwerów usługi Windows Azure SQL Database, wybierz inny region, taki jak eastus lub eastus2.

Weryfikowanie wdrożenia

Użyj witryny Azure Portal, aby sprawdzić wdrożone zasoby i sprawdzić wyniki poszczególnych wdrożeń.

  1. Przejdź do witryny Azure Portal i upewnij się, że jesteś w subskrypcji piaskownicy, wykonując następujące czynności:

    a. Wybierz swój awatar w prawym górnym rogu.
    b. Wybierz pozycję Przełącz katalog. Z listy wybierz katalog Microsoft Learn Sandbox.

  2. W okienku po lewej stronie wybierz pozycję Grupy zasobów.

  3. Wybierz pozycję [nazwa grupy zasobów piaskownicy].

  4. W sekcji Przegląd widać, że jedno wdrożenie zakończyło się pomyślnie. Widać również, że wdrożono serwer logiczny i bazę danych SQL, ale konto magazynu na potrzeby inspekcji nie zostało wdrożone.

    Uwaga

    Konto magazynu o nazwie rozpoczynającej się od jest niepowiązane z cloudshell wdrożeniem i zostało utworzone przez piaskownicę platformy Learn.

    Zrzut ekranu przedstawiający okienko przeglądu grupy zasobów witryny Azure Portal z sekcją z wyświetlonym pomyślnym wdrożeniem.

  5. Obok pozycji Wdrożenia wybierz pozycję 1 Powodzenie, aby wyświetlić szczegóły wdrożenia.

    Zrzut ekranu przedstawiający okienko przeglądu grupy zasobów witryny Azure Portal z dodatkowymi szczegółami pomyślnego wdrożenia.

  6. Wybierz wdrożenie o nazwie main , aby zobaczyć, które zasoby zostały wdrożone, a następnie wybierz pozycję Szczegóły wdrożenia, aby je rozwinąć.

    W takim przypadku wdrażany jest jeden serwer logiczny i jedna baza danych SQL. Zwróć uwagę, że ustawienia konta magazynu i inspekcji nie znajdują się na liście zasobów.

    Zrzut ekranu przedstawiający okienko przeglądu grupy zasobów witryny Azure Portal dla określonego wdrożenia z wyświetlonym zasobem serwera logicznego i bazy danych.

  7. Pozostaw tę stronę otwartą w przeglądarce. Ponownie sprawdzisz wdrożenia później.

Ponowne wdrażanie środowiska produkcyjnego

W poprzednim wdrożeniu użyto wartości domyślnej parametru environmentName , co oznaczało, że została ustawiona na Developmentwartość .

Teraz jawnie ustawisz wartość parametru na Productionwartość . Oczekujesz, że wprowadzenie tej zmiany spowoduje wdrożenie konta magazynu na potrzeby inspekcji, a inspekcja zostanie włączona na serwerze logicznym.

Wdrażanie szablonu dla środowiska produkcyjnego

W terminalu programu Visual Studio Code wdróż szablon Bicep na platformie Azure, uruchamiając następujący kod:

az deployment group create --name main --template-file main.bicep --parameters environmentName=Production location=westus3

W terminalu programu Visual Studio Code wdróż szablon na platformie Azure, uruchamiając następujące polecenie programu Azure PowerShell:

New-AzResourceGroupDeployment -Name main -TemplateFile main.bicep -environmentName Production -location westus3

Uwaga

Pamiętaj, aby użyć tego samego identyfikatora logowania i hasła, którego użyto wcześniej, lub wdrożenie nie zakończy się pomyślnie.

Po upływie minuty lub dwóch wdrożenie powinno zakończyć się pomyślnie.

Weryfikowanie ponownego wdrożenia

Aby ukończyć to ćwiczenie, sprawdź, czy ponowne wdrożenie zostało zakończone pomyślnie i czy inspekcja została włączona.

  1. Wróć do witryny Azure Portal i przejdź do grupy zasobów. Jeśli masz już otwartą grupę zasobów, wybierz pozycję Odśwież.

    Powinno zostać wyświetlone dodatkowe konto magazynu wdrożone do celów inspekcji.

    Zrzut ekranu przedstawiający okienko przeglądu grupy zasobów witryny Azure Portal z wyświetlonym wdrożeniem konta magazynu na potrzeby inspekcji.

  2. Wybierz serwer logiczny (wyszukaj zasób z typem SQL Server).

  3. W polu wyszukiwania wprowadź wartość Auditing (Inspekcja). W obszarze Zabezpieczenia wybierz pozycję Inspekcja.

    Zrzut ekranu przedstawiający interfejs witryny Azure Portal dla serwera logicznego z polem wyszukiwania z wprowadzonym inspekcją.

  4. Sprawdź, czy inspekcja jest włączona dla tego serwera logicznego.

    Zrzut ekranu przedstawiający interfejs witryny Azure Portal dla serwera logicznego z włączoną konfiguracją inspekcji.