Angiv værdier ved hjælp af parameterfiler

Fuldført

I de forrige enheder har du angivet parameterværdierne på kommandolinjen, da du oprettede en installation. Denne fremgangsmåde fungerer godt, når du skriver og tester dine Bicep-filer, men den fungerer ikke godt, når du har mange parametre, eller når du har brug for at automatisere dine udrulninger. I dette undermodul får du mere at vide om de forskellige måder, parameterværdier kan angives på.

Seddel

Kommandoerne i dette undermodul vises for at illustrere begreber. Kør ikke kommandoerne endnu. Du skal snart øve dig i det, du lærer her.

Opret parameterfiler

Parameterfiler gøre det nemt at angive parameterværdier sammen som et sæt. I parameterfilen angiver du værdier for parametrene i din Bicep-fil. parameterfiler oprettes ved hjælp af en Bicep-parameterfil med filtypenavnet .bicepparam eller en JSON-parameterfil, der indeholder parameterværdierne. Du kan angive en parameterfil, når du installerer din Bicep-skabelon. Sådan ser en JSON-parameterfil ud:

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

Lad os se nærmere på hver del af parameterfilen:

  • $schema hjælper Azure Resource Manager med at forstå, at denne fil er en parameterfil.
  • contentVersion er en egenskab, som du kan bruge til at holde styr på betydelige ændringer i din parameterfil, hvis du vil. Normalt er den angivet til standardværdien for 1.0.0.0.
  • I afsnittet parameters vises hver parameter og den værdi, du vil bruge. Parameterværdien skal angives som et objekt. Objektet har en egenskab kaldet value, der definerer den faktiske parameterværdi, der skal bruges.

Generelt skal du oprette en parameterfil for hvert miljø. Det er en god idé at medtage miljønavnet i navnet på parameterfilen. Du kan f.eks. have en parameterfil med navnet main.parameters.dev.json til dit udviklingsmiljø og en med navnet main.parameters.production.json til dit produktionsmiljø.

Seddel

Sørg for kun at angive værdier for parametre, der findes i Bicep-skabelonen. Når du opretter en installation, kontrollerer Azure dine parametre og giver dig en fejl, hvis du har forsøgt at angive en værdi for en parameter, der ikke findes i Bicep-filen.

Brug parameterfiler på installationstidspunktet

Når du opretter en ny installation ved hjælp af kommandoen az deployment group create, kan du angive navnet på den parameterfil, du vil bruge sammen med argumentet --parameters:

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

Når du opretter en ny installation ved hjælp af cmdlet'en New-AzResourceGroupDeployment, kan du angive navnet på den parameterfil, du vil bruge sammen med argumentet -TemplateParameterFile:

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

Tilsidesæt parameterværdier

Du har nu lært om tre måder at angive parameterværdier på: standardværdier, kommandolinjen og parameterfiler. Det er almindeligt at bruge forskellige metoder til at angive forskellige værdier for den samme parameter. Du har allerede set denne fremgangsmåde, da du arbejdede med standardværdier. Når du opretter en standardværdi for en parameter, men derefter angiver en anden værdi ved hjælp af kommandolinjen, har kommandolinjeværdien forrang. Lad os se på, hvordan parameterfiler passer ind i denne rangfølge.

diagram, der viser rækkefølgen af parameterværdiernes prioritet. Parameterfiler tilsidesætter standardværdier, og kommandolinjeparameterværdier tilsidesætter parameterfiler.

Du kan se, at parameterfiler tilsidesætter standardværdier, og kommandolinjeparameterværdier tilsidesætter parameterfiler.

Lad os se, hvordan denne fremgangsmåde fungerer. Her er et eksempel på en Bicep-fil, der definerer tre parametre, hver med standardværdier:

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

Lad os se på en parameterfil, der tilsidesætter værdien af to af parametrene, men ikke angiver en værdi for parameteren 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 opretter udrulningen, tilsidesætter vi også værdien for appServicePlanInstanceCount. På samme måde som med parameterfiler bruger du argumentet --parameters, men du tilføjer den værdi, du vil tilsidesætte, som sin egen værdi:

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

Når du opretter installationen, tilsidesætter du en af parameterværdierne. Du angiver parameternavnet, som om det er et argument til cmdlet'en:

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

Lad os se på, hvad værdierne vil være.

Parameter Værdi Forklaring
location Ressourcegruppens placering. Bicep-filen angiver denne parameter som en standardværdi, og den tilsidesættes ikke.
appServicePlanSku Et objekt med egenskaben name angivet til P1v3 og en tier af PremiumV3. Standardværdien i Bicep-filen tilsidesættes af parameterfilen.
appServicePlanInstanceCount 5 Den værdi, der er angivet på udrulningstidspunktet, tilsidesætter standardværdien og værdien i parameterfilen.

Når du bruger en blanding af metoderne til at angive parameterværdier, kan du undgå at skulle duplikere parameterværdier mange steder, samtidig med at du får fleksibiliteten til at tilsidesætte, hvor du har brug for det.