Oefening: resources voorwaardelijk implementeren

Voltooid

Notitie

De eerste keer dat u een sandbox activeert en de voorwaarden accepteert, is uw Microsoft-account gekoppeld aan een nieuwe Azure-directory met de naam Microsoft Learn Sandbox. U wordt ook toegevoegd aan een speciaal abonnement met de naam Concierge-abonnement.

U moet de resources van uw speelgoedbedrijf implementeren in verschillende omgevingen en u wilt parameters en voorwaarden gebruiken om te bepalen wat er in elke omgeving wordt geïmplementeerd.

In deze oefening maakt u een logische Azure SQL-server en een database. Vervolgens voegt u controle-instellingen toe om ervoor te zorgen dat controle is ingeschakeld, maar u wilt dat deze alleen is ingeschakeld wanneer u implementeert in een productieomgeving. Voor controledoeleinden moet u een opslagaccount hebben, dat u ook alleen implementeert wanneer u resources in een productieomgeving implementeert.

Tijdens het proces gaat u het volgende doen:

  • Maak een Bicep-bestand dat een logische server met een database definieert.
  • Voeg een opslagaccount en SQL-controle-instellingen toe, die elk met een voorwaarde worden geïmplementeerd.
  • Stel een infrastructuur in voor uw ontwikkelomgeving en controleer het resultaat.
  • Implementeer uw infrastructuur opnieuw in uw productieomgeving en bekijk vervolgens de wijzigingen.

In deze oefening wordt de Bicep-extensie voor Visual Studio Code gebruikt. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.

Een Bicep-sjabloon maken met een logische server en database

  1. Open Visual Studio Code.

  2. Maak een nieuw bestand met de naam main.bicep.

  3. Sla het lege bestand op zodat Visual Studio Code de Bicep-hulpprogramma's laadt.

    U kunt Bestand>opslaan als selecteren of Ctrl+S selecteren in Windows (⌘+S in macOS). Vergeet niet waar u het bestand hebt opgeslagen. U kunt bijvoorbeeld een map met sjablonen maken om deze op te slaan in.

  4. Als u een logische server en database wilt definiëren, voegt u de volgende inhoud toe aan het bestand, samen met de parameters en variabelen die deze resources nodig hebben. Voer de inhoud zelf in in plaats van te kopiëren en plakken, zodat u kunt zien hoe u met de hulpprogramma's uw Bicep-bestanden kunt schrijven.

    @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@2023-08-01-preview' = {
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdministratorLogin
        administratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }
    
    resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: sqlDatabaseSku
    }
    

    U ziet dat alle parameters decorators bevatten @description , waardoor ze gemakkelijker kunnen worden gebruikt. U ziet ook dat de decorator op de sqlServerAdministratorLogin parameters sqlServerAdministratorLoginPassword is @secure toegepast. Dit vertelt Bicep dat deze parameterwaarden gevoelig zijn. In Azure worden geen gevoelige waarden naar logboeken afgedrukt.

Een opslagaccount toevoegen

In de controle-instellingen voor de logische servers moet u een opslagaccount opgeven dat de controlegegevens bevat. U werkt uw Bicep-bestand bij om dit opslagaccount te maken, maar alleen wanneer controle wordt ingeschakeld.

  1. Voeg onder de parameterdeclaraties de volgende parameters toe:

    @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. Voeg onder de declaraties van variabelen de volgende variabelen toe:

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

    U maakt een variabele met de naam auditingEnabled, die u als voorwaarde gebruikt voor het implementeren van de controleresources. Wanneer u een variabele als deze maakt, maakt u uw Bicep-code duidelijker en gemakkelijker te lezen. Iedereen die de voorwaarden voor uw resources bekijkt, begrijpt wat er gebeurt.

    U ziet ook dat de auditStorageAccountName variabele gebruikmaakt van een functie die wordt aangeroepen take(). Namen van opslagaccounts hebben een maximale lengte van 24 tekens, dus met deze functie wordt het einde van de tekenreeks afgekort om ervoor te zorgen dat de naam geldig is.

  3. Voeg onder aan het bestand, onder de resources, de volgende resourcedefinitie toe voor het opslagaccount:

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

    U ziet dat de definities voor het opslagaccount het if trefwoord bevatten, waarmee een implementatievoorwaarde wordt opgegeven.

Controle-instellingen toevoegen

  1. Voeg onder de opslagaccountresource die u zojuist hebt toegevoegd het volgende toe:

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

    U ziet dat de definitie dezelfde if voorwaarde bevat als het opslagaccount. storageEndpoint De en storageAccountAccessKey eigenschappen gebruiken ook het vraagteken (?) ternaire operator om ervoor te zorgen dat hun waarden altijd geldig zijn. Als u dit niet doet, evalueert Azure Resource Manager de expressiewaarden voordat deze de voorwaarde voor de resource-implementatie evalueert en een fout retourneert, omdat het opslagaccount niet kan worden gevonden.

  2. Sla de wijzigingen in het bestand op.

Uw Bicep-bestand controleren

Nadat u alle voorgaande wijzigingen hebt voltooid, moet uw Bicep-bestand er als volgt uitzien:

@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@2023-08-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-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@2023-08-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
  }
}

Als dit niet het geval is, kopieert u het voorbeeld of past u de sjabloon aan zodat deze overeenkomt met het voorbeeld.

De Bicep-sjabloon implementeren in Azure

Als u deze sjabloon wilt implementeren in Azure, moet u zich aanmelden bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u de Azure CLI hebt geïnstalleerd en vergeet niet om u aan te melden met hetzelfde account dat u hebt gebruikt om de sandbox te activeren.

  1. Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.

  2. Als de shell aan de rechterkant van het terminalvenster bash is, is de juiste shell geopend en kunt u doorgaan naar de volgende sectie.

    Schermopname van het Visual Studio Code-terminalvenster, met de bash-optie weergegeven.

  3. Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Azure Cloud Shell (Bash).

    Schermopname van het Visual Studio Code-terminalvenster, met de vervolgkeuzelijst terminalshell weergegeven en Git Bash Default geselecteerd.

  4. Selecteer bash in de lijst met terminalshells.

    Schermopname van het Visual Studio Code-terminalvenster, met de bash-terminal geselecteerd.

  5. Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u de sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:

    cd templates
    

Bicep installeren

Voer de volgende opdracht uit om te controleren of u de nieuwste versie van Bicep hebt:

az bicep install && az bicep upgrade

Aanmelden bij Azure

  1. Meld u in de Visual Studio Code-terminal aan bij Azure door de volgende opdracht uit te voeren:

    az login
    
  2. Meld u aan bij uw Azure-account in de browser die wordt geopend.

    In de Visual Studio Code-terminal wordt een lijst weergegeven met de abonnementen die aan dit account zijn gekoppeld.

  3. Stel het standaardabonnement in voor alle Azure CLI-opdrachten die u in deze sessie uitvoert.

    az account set --subscription "Concierge Subscription"
    

    Notitie

    Als u meer dan één sandbox onlangs hebt gebruikt, kan in de terminal meer dan één exemplaar van Concierge-abonnement worden weergegeven. In dit geval gebruikt u de volgende twee stappen om er een in te stellen als het standaardabonnement. Als de voorgaande opdracht is geslaagd en er slechts één Concierge-abonnement wordt weergegeven, slaat u de volgende twee stappen over.

  4. Verkrijg de id’s van het Concierge-abonnement.

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. Stel het standaardabonnement in met behulp van de abonnements-id. Vervang {uw abonnements-id} door de meest recente Concierge-abonnements-id.

    az account set --subscription {your subscription ID}
    

De standaardresourcegroep instellen

Wanneer u de Azure CLI gebruikt, kunt u de standaardresourcegroep instellen en de parameter weglaten uit de rest van de Azure CLI-opdrachten in deze oefening. Stel de standaardinstelling in op de resourcegroep die voor u is gemaakt in de sandbox-omgeving.

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

De sjabloon implementeren in Azure met behulp van de Azure CLI

Implementeer in de Visual Studio Code-terminal de Bicep-sjabloon in Azure door de volgende code uit te voeren. U ziet dat u de location parameter expliciet instelt op westus3.

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

Als u deze sjabloon wilt implementeren in Azure, meldt u zich aan bij uw Azure-account vanuit de Visual Studio Code-terminal. Zorg ervoor dat u Azure PowerShell hebt geïnstalleerd en meld u aan bij hetzelfde account dat de sandbox heeft geactiveerd.

  1. Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.

  2. Als de shell aan de rechterkant van het terminalvenster powershell of pwsh is, is de juiste shell geopend en kunt u doorgaan naar de volgende sectie.

    Schermopname van het Visual Studio Code-terminalvenster, met de optie pwsh weergegeven in de vervolgkeuzelijst shell.

  3. Als een andere shell dan powershell of pwsh wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.

    Schermopname van het Visual Studio Code-terminalvenster, met de vervolgkeuzelijst terminalshell weergegeven en PowerShell geselecteerd.

  4. Selecteer powershell of pwsh in de lijst met terminalshells.

    Schermopname van het Visual Studio Code-terminalvenster, waarbij de PowerShell-terminal is geselecteerd.

  5. Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u uw sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:

    Set-Location -Path templates
    

Bicep CLI installeren

Als u Bicep wilt gebruiken vanuit Azure PowerShell, installeert u de Bicep CLI.

Aanmelden bij Azure met behulp van Azure PowerShell

  1. Voer in de Visual Studio Code-terminal de volgende opdracht uit:

    Connect-AzAccount
    

    Er wordt een browser geopend, zodat u zich kunt aanmelden bij uw Azure-account.

  2. Nadat u zich hebt aangemeld bij Azure, wordt in de terminal een lijst weergegeven met de abonnementen die aan dit account zijn gekoppeld.

    Als u de sandbox hebt geactiveerd, wordt een abonnement met de naam Concierge-abonnement weergegeven. Gebruik deze voor de rest van de oefening.

  3. Stel het standaardabonnement in voor alle Azure PowerShell-opdrachten die u in deze sessie uitvoert.

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    Notitie

    Als u meer dan één sandbox onlangs hebt gebruikt, kan in de terminal meer dan één exemplaar van Concierge-abonnement worden weergegeven. In dit geval gebruikt u de volgende twee stappen om er een in te stellen als het standaardabonnement. Als de voorgaande opdracht is geslaagd en er slechts één Concierge-abonnement wordt weergegeven, slaat u de volgende twee stappen over.

  4. Verkrijg de abonnements-id. Als u de volgende opdracht uitvoert, worden uw abonnementen en hun id's vermeld. Concierge SubscriptionZoek en kopieer de id uit de tweede kolom. Het ziet er ongeveer als volgt uit: cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    Get-AzSubscription
    
  5. Wijzig uw actieve abonnement in Concierge-abonnement. Zorg ervoor dat u {Uw abonnements-id} vervangt door de id die u hebt gekopieerd.

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

De standaardresourcegroep instellen

U kunt de standaardresourcegroep instellen en de parameter weglaten uit de rest van de Azure PowerShell-opdrachten in deze oefening. Stel deze standaardinstelling in op de resourcegroep die voor u is gemaakt in de sandbox-omgeving.

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

De sjabloon implementeren in Azure met behulp van Azure PowerShell

Implementeer de sjabloon in de Visual Studio Code-terminal in Azure door de volgende Azure PowerShell-opdracht uit te voeren. Het kan enkele minuten duren voordat dit proces is voltooid. Vervolgens hebt u een geslaagde implementatie.

New-AzResourceGroupDeployment -TemplateFile main.bicep -location westus3

U wordt gevraagd de waarden voor sqlServerAdministratorLogin en sqlServerAdministratorLoginPassword parameters in te voeren wanneer u de implementatie uitvoert.

Tip

Wanneer u de beveiligde parameters invoert, moeten de waarden die u kiest, bepaalde regels volgen:

  • sqlServerAdministratorLogin mag geen gemakkelijk te raden aanmeldingsnaam zijn, zoals admin of root. Deze mag alleen alfanumerieke tekens bevatten en moet beginnen met een letter.
  • sqlServerAdministratorLoginPassword moet ten minste acht tekens lang zijn en kleine letters, hoofdletters, cijfers en symbolen bevatten. Zie het SQL Azure-wachtwoordbeleid voor meer informatie over wachtwoordcomplexiteit.

Als de parameterwaarden niet voldoen aan de vereisten, implementeert Azure SQL uw logische server niet.

Let ook op de aanmelding en het wachtwoord dat u invoert. U gebruikt ze binnenkort opnieuw.

Omdat u geen waarde voor de environmentName parameter hebt opgegeven, wordt de standaardwaarde Development gebruikt.

Wacht tot de implementatie is voltooid. Als uw implementatie mislukt met een bericht dat een locatie het maken van nieuwe Windows Azure SQL Database-servers niet accepteert, selecteert u een andere regio, zoals eastus of eastus2.

De implementatie controleren

Gebruik Azure Portal om de resources te controleren die u implementeert en om de resultaten van elke implementatie te controleren.

  1. Ga naar Azure Portal en zorg ervoor dat u zich in het sandbox-abonnement bevindt door het volgende te doen:

    a. Selecteer uw avatar rechtsboven.
    b. Selecteer Schakelen tussen directory's. In de lijst selecteert u de map Microsoft Learn Sandbox.

  2. Selecteer Resourcegroepen in het linkerdeelvenster.

  3. Selecteer [naam sandboxresourcegroep].

  4. In de sectie Overzicht ziet u dat één implementatie is geslaagd. U kunt ook zien dat een logische server en een SQL-database zijn geïmplementeerd, maar het opslagaccount voor controle is niet geïmplementeerd.

    Notitie

    Het opslagaccount met een naam die begint met cloudshell de implementatie, is niet gerelateerd aan uw implementatie en is gemaakt door de Learn-sandbox.

    Schermopname van het overzichtsvenster van de Azure-portalresourcegroep, met een sectie waarin een geslaagde implementatie wordt weergegeven.

  5. Selecteer naast Implementaties 1 Geslaagd om de implementatiedetails weer te geven.

    Schermopname van het overzichtsvenster van de Resourcegroep in de Azure-portal, met aanvullende details van de geslaagde implementatie.

  6. Selecteer de implementatie met de naam Main om te zien welke resources zijn geïmplementeerd en selecteer vervolgens Implementatiedetails om deze uit te vouwen.

    In dit geval worden één logische server en één SQL-database geïmplementeerd. U ziet dat het opslagaccount en de controle-instellingen zich niet in de lijst met resources bevinden.

    Schermopname van het overzichtsvenster van de Resourcegroep in Azure Portal voor de specifieke implementatie, met een logische server en databaseresource vermeld.

  7. Laat de pagina in uw browser open. U controleert de implementaties later opnieuw.

Opnieuw implementeren voor de productieomgeving

In de vorige implementatie werd de standaardwaarde voor de environmentName parameter gebruikt, wat betekende dat deze is ingesteld op Development.

Nu stelt u de parameterwaarde expliciet in op Production. Als u deze wijziging aanbrengt, wordt het opslagaccount voor controledoeleinden geïmplementeerd en wordt controle ingeschakeld op de logische server.

De sjabloon voor de productieomgeving implementeren

Implementeer in de Visual Studio Code-terminal de Bicep-sjabloon in Azure door de volgende code uit te voeren:

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

Implementeer de sjabloon in de Visual Studio Code-terminal in Azure door de volgende Azure PowerShell-opdracht uit te voeren:

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

Let op

Zorg ervoor dat u dezelfde aanmelding en hetzelfde wachtwoord gebruikt als u eerder hebt gebruikt, anders wordt de implementatie niet voltooid.

Na enkele minuten moet de implementatie zijn voltooid.

De herployment controleren

Als u deze oefening wilt voltooien, controleert u of het opnieuw implementeren is voltooid en of de controle is ingeschakeld.

  1. Ga terug naar Azure Portal en ga naar uw resourcegroep. Als u de resourcegroep al hebt geopend, selecteert u Vernieuwen.

    U ziet dat er een extra opslagaccount is geïmplementeerd voor controledoeleinden.

    Schermopname van het overzichtsvenster van de Resourcegroep in Azure Portal, waarin wordt weergegeven dat er een opslagaccount is geïmplementeerd voor controle.

  2. Selecteer uw logische server (zoek de resource met het type SQL-server).

  3. Voer controle in het zoekveld in. Selecteer Controle onder Beveiliging.

    Schermopname van de Azure Portal-interface voor de logische server, met het zoekveld waarin Controle is ingevoerd.

  4. Controleer of controle is ingeschakeld voor deze logische server.

    Schermopname van de Azure Portal-interface voor de logische server, waarin wordt weergegeven dat de controleconfiguratie is ingeschakeld.