Oefening: parameters en variabelen toevoegen aan uw Bicep-sjabloon

Voltooid

In deze oefening werkt u de Bicep-sjabloon bij die u eerder hebt gemaakt, zodat deze:\

  • Accepteert parameters voor de resourcelocaties en -namen.
  • Gebruikt uw bedrijfsregels om de juiste SKU's te selecteren voor de resources die worden geïmplementeerd.

Tijdens het proces gaat u het volgende doen:

  • Werk de sjabloon bij om een location parameter op te nemen.
  • Werk de sjabloon bij om parameters en variabelen voor de resourcenamen op te nemen.
  • Gebruik expressies om standaardwaarden in te stellen voor de parameters.
  • Werk de sjabloon bij om variabelen op te nemen voor de SKU van elke resource.
  • Test de implementatie om ervoor te zorgen dat de sjabloon geldig is.

De parameters voor de locatie en resourcenaam toevoegen

  1. Voeg in het bestand main.bicep in Visual Studio Code de volgende code toe aan het begin van het bestand:

    param location string = 'eastus'
    param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

    De Bicep linter voegt gele golvende lijnen toe onder elke parameter en variabelenaam om aan te geven dat ze niet worden gebruikt in de sjabloon. U lost dit probleem binnenkort op.

    U gebruikt expressies met tekenreeksinterpolatie en de uniqueString() functie om standaardparameterwaarden te definiëren. Iemand die deze sjabloon implementeert, kan de standaardparameterwaarden overschrijven door de waarden op te geven tijdens de implementatie, maar ze kunnen de variabelewaarden niet overschrijven.

    U ziet ook dat u een variabele gebruikt voor de naam van het Azure-app Service-plan, maar dat u parameters voor de andere namen gebruikt. Opslagaccounts en App Service-apps hebben wereldwijd unieke namen nodig, maar namen van App Service-plannen moeten alleen uniek zijn binnen hun resourcegroep. Dit verschil betekent dat het geen probleem is om dezelfde Naam van het App Service-plan te gebruiken voor verschillende implementaties, zolang de implementaties allemaal naar verschillende resourcegroepen gaan.

    Tip

    U geeft op dat de location parameter moet worden ingesteld op westus3. Normaal gesproken maakt u resources op dezelfde locatie als de resourcegroep met behulp van de resourceGroup().location eigenschap. Maar wanneer u met de Microsoft Learn-sandbox werkt, moet u bepaalde Azure-regio's gebruiken die niet overeenkomen met de locatie van de resourcegroep.

  2. Zoek de locaties in de resourcedefinities waar de location en name eigenschappen zijn ingesteld en werk ze bij om de parameterwaarden te gebruiken. Nadat u klaar bent, moeten de resourcedefinities in uw Bicep-bestand er als volgt uitzien:

    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. Sla de wijzigingen in het bestand op.

De SKU's automatisch instellen voor elk omgevingstype

  1. Voeg in het bestand main.bicep in Visual Studio Code de volgende Bicep-parameter toe onder de parameters die u in de vorige taak hebt gemaakt:

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

    U definieert een parameter met een set toegestane waarden, maar u geeft geen standaardwaarde op voor deze parameter.

  2. Voeg onder de regel die de appServicePlanName variabele declareert de volgende variabeledefinities toe:

    var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    

    U ziet dat u deze variabelenwaarden instelt met behulp van de ternaire operator om logica if/then/else uit te drukken.

  3. Zoek de locaties in de resourcedefinities waar de sku eigenschappen zijn ingesteld en werk ze bij om de parameterwaarden te gebruiken. Nadat u klaar bent, moeten de resourcedefinities in uw Bicep-bestand er als volgt uitzien:

    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
      }
    }
    

    U hebt niet alles geparameteriseerd. U hebt bepaalde eigenschappen rechtstreeks in de resourcedefinities ingesteld, waarbij u weet dat deze waarden niet tussen implementaties worden gewijzigd.

  4. Sla de wijzigingen in het bestand op.

Uw Bicep-bestand controleren

Nadat u alle voorgaande wijzigingen hebt voltooid, moet het bestand main.bicep er als volgt uitzien:

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
  }
}

Als het bestand niet overeenkomt, kopieert u het voorbeeld of past u het bestand aan zodat het overeenkomt met het voorbeeld.

De bijgewerkte Bicep-sjabloon implementeren

Voer de volgende Azure CLI-opdracht uit in de terminal.

az deployment group create \
  --template-file main.bicep \
  --parameters environmentType=nonprod

Voer de volgende Azure PowerShell-opdracht uit in de terminal.

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -environmentType nonprod

U ziet dat u expliciet de waarde voor de environmentType parameter opgeeft wanneer u de implementatie uitvoert. U hoeft de andere parameterwaarden niet op te geven, omdat deze geldige standaardwaarden hebben.

Uw implementatie controleren

  1. Ga in uw browser terug naar Azure Portal en ga naar uw resourcegroep. U ziet nog steeds één geslaagde implementatie, omdat de implementatie dezelfde naam heeft gebruikt als de eerste implementatie.

  2. Selecteer de koppeling 1 Geslaagd .

  3. Selecteer de implementatie met de naam Main en selecteer vervolgens Implementatiedetails om de lijst met geïmplementeerde resources uit te vouwen.

    Schermopname van de Azure Portal-interface voor de specifieke implementatie, met opslagaccount en App Service-resources die worden vermeld met gegenereerde namen.

  4. U ziet dat er een nieuw App Service-app- en opslagaccount is geïmplementeerd met willekeurig gegenereerde namen.