Ange värden med hjälp av parameterfiler

Slutförd

I föregående enheter angav du parametervärdena på kommandoraden när du skapade en distribution. Den här metoden fungerar bra när du skriver och testar dina Bicep-filer, men det fungerar inte bra när du har många parametrar eller när du behöver automatisera dina distributioner. I den här lektionen får du lära dig om olika sätt att ange parametervärden.

Kommentar

Kommandona i den här enheten visas för att illustrera begrepp. Kör inte kommandona än. Du kommer att öva på det du lär dig här snart.

Skapa parameterfiler

Parameterfiler gör det enkelt att ange parametervärden tillsammans som en uppsättning. I parameterfilen anger du värden för parametrarna i Bicep-filen. Parameterfiler skapas med hjälp av JSON-språket (JavaScript Object Notation). Du kan ange en parameterfil när du distribuerar Bicep-mallen. Så här ser en parameterfil ut:

{
  "$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"
        }
      ]
    }
  }
}

Nu ska vi titta närmare på varje del av parameterfilen:

  • $schema hjälper Azure Resource Manager att förstå att den här filen är en parameterfil.
  • contentVersion är en egenskap som du kan använda för att hålla reda på betydande ändringar i parameterfilen om du vill. Vanligtvis är den inställd på standardvärdet 1.0.0.0.
  • I parameters avsnittet visas varje parameter och det värde som du vill använda. Parametervärdet måste anges som ett objekt. Objektet har en egenskap med namnet value som definierar det faktiska parametervärdet som ska användas.

I allmänhet skapar du en parameterfil för varje miljö. Det är en bra idé att inkludera miljönamnet i namnet på parameterfilen. Du kan till exempel ha en parameterfil med namnet main.parameters.dev.json för utvecklingsmiljön och en med namnet main.parameters.production.json för produktionsmiljön.

Kommentar

Kontrollera att du bara anger värden för parametrar som finns i Bicep-mallen. När du skapar en distribution kontrollerar Azure dina parametrar och ger dig ett fel om du har försökt ange ett värde för en parameter som inte finns i Bicep-filen.

Använda parameterfiler vid distributionstillfället

När du skapar en ny distribution med hjälp az deployment group create av kommandot kan du ange namnet på parameterfilen som du vill använda med --parameters argumentet:

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

När du skapar en ny distribution med hjälp av cmdleten New-AzResourceGroupDeployment kan du ange namnet på parameterfilen som du vill använda med -TemplateParameterFile argumentet:

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

Åsidosätt parametervärden

Du har nu lärt dig om tre sätt att ange parametervärden: standardvärden, kommandoraden och parameterfiler. Det är vanligt att använda olika metoder för att ange olika värden för samma parameter. Du har redan sett den här metoden när du arbetade med standardvärden. När du skapar ett standardvärde för en parameter, men sedan anger ett annat värde med hjälp av kommandoraden, har kommandoradsvärdet företräde. Nu ska vi titta på hur parameterfiler passar in i den här prioritetsordningen.

Diagram som visar prioritetsordningen för parametervärden. Parameterfiler åsidosätter standardvärden och kommandoradsparametervärden åsidosätter parameterfiler.

Du kan se att parameterfiler åsidosätter standardvärden och kommandoradsparametervärden åsidosätter parameterfiler.

Nu ska vi se hur den här metoden fungerar. Här är ett exempel på en Bicep-fil som definierar tre parametrar, var och en med standardvärden:

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

Nu ska vi titta på en parameterfil som åsidosätter värdet för två av parametrarna, men som inte anger något värde för parametern 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"
      }
    }
  }
}

När du skapar distributionen åsidosätter vi även värdet för appServicePlanInstanceCount. Precis som med parameterfiler använder --parameters du argumentet, men du lägger till det värde som du vill åsidosätta som sitt eget värde:

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

När du skapar distributionen åsidosätter du ett av parametervärdena. Du anger parameternamnet som om det vore ett argument till cmdleten:

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

Nu ska vi titta på vad värdena kommer att bli.

Parameter Värde Förklaring
location Resursgruppens plats. Bicep-filen anger den här parametern som ett standardvärde och den är inte åsidosatt.
appServicePlanSku Ett objekt med en name egenskap inställd på P1v3 och en tier av PremiumV3. Standardvärdet i Bicep-filen åsidosättas av parameterfilen.
appServicePlanInstanceCount 5 Värdet som angavs vid distributionstiden åsidosätter standardvärdet och värdet i parameterfilen.

Genom att använda en blandning av metoder för att ange parametervärden kan du undvika att behöva duplicera parametervärden på många platser, samtidigt som du får flexibiliteten att åsidosätta där du behöver.