Oefening: parameters en variabelen toevoegen aan uw Bicep-sjabloon
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
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 opwestus3
. Normaal gesproken maakt u resources op dezelfde locatie als de resourcegroep met behulp van deresourceGroup().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.Zoek de locaties in de resourcedefinities waar de
location
enname
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 } }
Sla de wijzigingen in het bestand op.
De SKU's automatisch instellen voor elk omgevingstype
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.
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.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.
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
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.
Selecteer de koppeling 1 Geslaagd .
Selecteer de implementatie met de naam Main en selecteer vervolgens Implementatiedetails om de lijst met geïmplementeerde resources uit te vouwen.
U ziet dat er een nieuw App Service-app- en opslagaccount is geïmplementeerd met willekeurig gegenereerde namen.