Esercizio - Aggiungere parametri e variabili al modello Bicep
In questo esercizio si aggiornerà il modello Bicep creato in precedenza in modo che:\
- Accetti parametri per le località e i nomi delle risorse.
- Usi le regole aziendali precedentemente definite per selezionare gli SKU appropriati per le risorse da distribuire.
Durante il processo, si eseguiranno queste operazioni:
- Aggiornare il modello in modo che contenga un parametro
location
. - Aggiornare il modello in modo che contenga parametri e variabili per i nomi di risorse.
- Usare espressioni per impostare valori predefiniti per i parametri.
- Aggiornare il modello in modo da contenere variabili per lo SKU di ogni risorsa.
- Testare la distribuzione per verificare che il modello sia valido.
Aggiungere i parametri per le località e i nomi delle risorse
Nel file main.bicep in Visual Studio Code aggiungere il codice seguente all'inizio del file:
param location string = 'eastus' param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}' param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}' var appServicePlanName = 'toy-product-launch-plan'
Bicep linter aggiunge righe gialle ondulate sotto ogni parametro e nomi di variabile per indicare che non sono usati nel modello. Questo problema verrà risolto a breve.
Osservare come si stiano usando espressioni che includono l'interpolazione di stringhe e la funzione
uniqueString()
per definire valori di parametri predefiniti. Gli utenti che distribuiranno questo modello potranno sovrascrivere i valori di parametri predefiniti specificando nuovi valori in fase di distribuzione, ma non potranno sostituire i valori delle variabili.Osservare inoltre come venga usata una variabile per il nome del piano Servizio app di Azure e vengano usati invece parametri per gli altri nomi. Gli account di archiviazione e le app del Servizio app di Azure richiedono nomi univoci a livello globale, ma i nomi dei piani di servizio app devono essere univoci solo all'interno del rispettivo gruppo di risorse. Questo significa che non è un problema se viene usato lo stesso nome del piano di servizio app in distribuzioni diverse, purché le distribuzioni si trovino in gruppi di risorse diversi.
Suggerimento
Si specifica che il parametro
location
deve essere impostato suwestus3
. In genere, si creano risorse nella stessa località del gruppo di risorse usando la proprietàresourceGroup().location
. Ma quando si lavora con la sandbox di Microsoft Learn, è necessario usare determinate aree di Azure che non corrispondono alla posizione del gruppo di risorse.Individuare i punti all'interno delle definizioni di risorse in cui sono impostate le proprietà
location
ename
e aggiornarle in modo che vengano usati i valori dei parametri. Al termine, le definizioni delle risorse nel file Bicep avranno un aspetto simile al seguente: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@2024-04-01' = { name: appServicePlanName location: location sku: { name: 'F1' } } resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
Salvare le modifiche apportate al file.
Impostare automaticamente gli SKU per ogni tipo di ambiente
Nel file main.bicep in Visual Studio Code aggiungere il parametro Bicep seguente sotto i parametri creati nell'attività precedente:
@allowed([ 'nonprod' 'prod' ]) param environmentType string
Si noti che si sta definendo un parametro con un set di valori consentiti e non si sta specificando un valore predefinito per questo parametro.
Sotto la riga che dichiara la variabile
appServicePlanName
, aggiungere le definizioni di variabile seguenti:var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
Si noti che si stanno impostando i valori di queste variabili usando l'operatore ternario per esprimere una logica di tipo
if/then/else
.Individuare i punti all'interno delle definizioni di risorse in cui sono impostate le proprietà
sku
e aggiornarle in modo che vengano usati i valori dei parametri. Al termine, le definizioni delle risorse nel file Bicep avranno un aspetto simile al seguente: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@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 } }
Osservare come non tutto sia stato parametrizzati. Alcune proprietà, infatti, sono state impostate direttamente nelle definizioni delle risorse, laddove si sa che questi valori non cambieranno in base alla distribuzione.
Salvare le modifiche apportate al file.
Verificare il file Bicep
Al termine di tutte le modifiche precedenti, il file main.bicep avrà un aspetto simile al seguente:
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@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
}
}
Se il file non corrisponde all'esempio, copiare l'esempio oppure modificare il file in modo che corrisponda all’esempio.
Distribuire il modello Bicep aggiornato
Eseguire il seguente comando dell'interfaccia della riga di comando di Azure nel terminale.
az deployment group create \
--name main \
--template-file main.bicep \
--parameters environmentType=nonprod
Eseguire il seguente comando di Azure PowerShell nel terminale.
New-AzResourceGroupDeployment `
-Name main `
-TemplateFile main.bicep `
-environmentType nonprod
Osservare come, mentre il valore del parametro environmentType
viene specificato in modo esplicito quando si esegue la distribuzione, Non è necessario specificare i valori degli altri parametri, perché hanni valori predefiniti validi.
Controllare la distribuzione
Nel browser, tornare al portale di Azure e passare al gruppo di risorse. Risulterà ancora una sola distribuzione completata, poiché in questa distribuzione è stato usato lo stesso nome della prima.
Selezionare il collegamento 1 Completata.
Selezionare la distribuzione denominata main e quindi scegliere Dettagli della distribuzione per espandere l'elenco delle risorse distribuite.
Si noti che sono stati distribuiti una nuova app servizio app e un account di archiviazione con nomi generati in modo casuale.