Fornire i valori mediante file di parametri

Completato

Nelle unità precedenti, i valori dei parametri sono stati specificati nella riga di comando al momento della creazione di una distribuzione. Questo approccio funziona bene quando si scrivono e si testano i file Bicep, ma non quando i parametri sono numerosi o quando è necessario automatizzare le distribuzioni. In questa unità si apprenderanno i diversi modi in cui è possibile specificare i valori dei parametri.

Nota

I comandi riportati in questa unità vengono illustrati per spiegare i concetti. Non eseguire ancora i comandi. Presto sarà possibile provare quanto appreso.

Creare il file di parametri

I file di parametri consentono di specificare facilmente i valori dei parametri come set. Nel file di parametri si forniscono i valori per i parametri del file Bicep. Per creare i file di parametri si usa il linguaggio JSON (JavaScript Object Notation). È possibile fornire un file di parametri quando si distribuisce il modello Bicep. Ecco l'aspetto di un file di parametri:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServicePlanInstanceCount": {
      "value": 3
    },
    "appServicePlanSku": {
      "value": {
        "name": "P1v3",
        "tier": "PremiumV3"
      }
    },
    "cosmosDBAccountLocations": {
      "value": [
        {
          "locationName": "australiaeast"
        },
        {
          "locationName": "southcentralus"
        },
        {
          "locationName": "westeurope"
        }
      ]
    }
  }
}

Esaminiamo in dettaglio le varie parti del file di parametri:

  • $schema indica ad Azure Resource Manager che si tratta di un file di parametri.
  • contentVersion è una proprietà che, se necessario, si può usare per tenere traccia delle modifiche significative apportate al file di parametri. In genere è impostata sul valore predefinito 1.0.0.0.
  • La sezione parameters elenca ogni parametro e il valore da usare. Il valore del parametro deve essere specificato come oggetto. L'oggetto ha una proprietà denominata value, che definisce l'effettivo valore del parametro da usare.

Come regola generale, si creerà un file di parametri per ogni ambiente. È consigliabile includere il nome dell'ambiente nel nome del file di parametri. Ad esempio, si potrebbe avere un file di parametri denominato main.parameters.dev.json per l'ambiente di sviluppo e uno denominato main.parameters.production.js per l'ambiente di produzione.

Nota

Assicurarsi di specificare valori solo per i parametri disponibili nel modello Bicep. Quando si crea una distribuzione, Azure controlla i parametri e restituisce un errore se si è provato a specificare un valore per un parametro non presente nel file Bicep.

Usare i file di parametri al momento della distribuzione

Quando si crea una nuova distribuzione usando il comando az deployment group create, è possibile specificare il nome del file di parametri da usare con l'argomento --parameters:

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.json

Quando si crea una nuova distribuzione usando il cmdlet New-AzResourceGroupDeployment, è possibile specificare il nome del file di parametri da usare con l'argomento -TemplateParameterFile:

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.json

Sostituzione dei valori dei parametri

A questo punto si sono appresi i tre modi per specificare i valori dei parametri: mediante valori predefiniti, mediante la riga di comando e mediante file di parametri. È normale usare approcci diversi per specificare valori differenti per lo stesso parametro. Si è già usato questo approccio lavorando con i valori predefiniti. Quando si crea un valore predefinito per un parametro, ma poi si specifica un valore diverso usando la riga di comando, il valore della riga di comando ha la precedenza. L'immagine che segue illustra dove si inseriscono i file dei parametri nell'ordine di precedenza.

Diagram that shows the order of precedence for parameter values. Parameter files override default values, and command-line parameter values override parameter files.

Come si può vedere, i file di parametri sostituiscono i valori predefiniti e i valori dei parametri da riga di comando sostituiscono quelli nei file di parametri.

Di seguito viene illustrato il funzionamento di questo approccio. Ecco un file Bicep di esempio che definisce tre parametri, ognuno con valori predefiniti:

param location string = resourceGroup().location
param appServicePlanInstanceCount int = 1
param appServicePlanSku object = {
  name: 'F1'
  tier: 'Free'
}

Il seguente è un file di parametri che sostituisce il valore di due dei parametri, ma non specifica un valore per il parametro location:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServicePlanInstanceCount": {
      "value": 3
    },
    "appServicePlanSku": {
      "value": {
        "name": "P1v3",
        "tier": "PremiumV3"
      }
    }
  }
}

Quando si crea la distribuzione, si sostituisce anche il valore di appServicePlanInstanceCount. Come per i file di parametri, si usa l'argomento --parameters, ma si aggiunge il valore da sostituire come valore proprio:

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.json \
               appServicePlanInstanceCount=5

Quando si crea la distribuzione, si sostituisce uno dei valori dei parametri. Si specifica il nome del parametro come se fosse un argomento del cmdlet:

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.json `
  -appServicePlanInstanceCount 5

Vediamo quali saranno i valori.

Parametro Valore Spiegazione
location La posizione del gruppo di risorse. Il file Bicep specifica questo parametro come valore predefinito e non viene sostituito.
appServicePlanSku Un oggetto con una proprietà name impostata su P1v3 e un tier di PremiumV3. Il valore predefinito nel file Bicep viene sostituito dal file di parametri.
appServicePlanInstanceCount 5 Il valore specificato in fase di distribuzione sostituisce il valore predefinito e il valore nel file di parametri.

Usando una combinazione degli approcci per specificare i valori dei parametri, si può evitare di duplicare i valori dei parametri in molte posizioni, conservando però la flessibilità di poterlo fare laddove necessario.