使用參數檔案提供值

已完成

在上一個單元中,您已在建立部署時,於命令列上提供參數值。 當您撰寫及測試 Bicep 檔案時,此法很好用,但當您有許多參數,或需要自動執行部署時,就不是太好運用。 在此單元中,您將了解指定參數值的各種方式。

注意

本單元中的命令僅用於示範概念。 請先不要執行命令。 您很快就會在此練習所學到的內容。

建立參數檔案

「參數檔案」可讓您輕鬆指定一組參數值。 在參數檔案中,為 Bicep 檔案中的參數提供值。 參數檔案使用 JavaScript 物件標記法 (JSON) 語言建立。 當您部署 Bicep 範本時,可以提供參數檔案。 參數檔案類似於如下所示:

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

以下是參數檔案各部分的詳細說明:

  • $schema 可協助 Azure Resource Manager 了解此檔案是參數檔案。
  • contentVersion 是屬性,可以在您需要時,用於追蹤參數檔案中的重大變更。 這通常會設定為其預設值 1.0.0.0
  • parameters 區段會列出您要使用的每一個參數與值。 參數值必須指定為物件。 物件具有名為 value 的屬性,可定義要使用的實際參數值。

通常您會為每個環境建立參數檔案。 建議在參數檔案的名稱中包含環境名稱。 例如,您可以將開發環境之一的參數檔案命名為 main.parameters.dev.json,另一個生產環境的參數檔案則命名為 main.parameters.production.json

注意

請注意,您只須為 Bicep 範本既有的參數指定值。 當您建立部署時,Azure 會檢查您的參數;當您嘗試為 Bicep 檔案沒有的參數指定值時,將會發出錯誤警示。

在部署期間使用參數檔案

當您使用 az deployment group create 命令建立新的部署時,可以指定要在 --parameters 引數中使用的參數檔案名稱:

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

當您使用 New-AzResourceGroupDeployment Cmdlet 建立新的部署時,可以指定要在 -TemplateParameterFile 引數中使用的參數檔案名稱:

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

覆寫參數值

您現在已經學會指定參數值的三種方式:預設值、命令列與參數檔案。 使用不同的方法,為同一個參數指定不同的值,是很常見的做法。 這幾種做法您已在使用預設值時看過。 當您建立了參數的預設值,但又使用命令列指定不同的值時,會優先使用命令列值。 我們現在就來看看,參數檔案在此優先順序中的運作方式。

此圖表顯示參數值的優先順序。參數檔案會覆寫預設值,而命令列參數值會覆寫參數檔案。

您可以看到參數檔案會覆寫預設值,而命令列參數值會覆寫參數檔案。

讓我們一起看看此法如何運作。 下列範例 Bicep 檔案定義了三個參數,每個參數都有預設值:

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

參數檔案會覆寫兩個參數的值,但不會指定 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"
      }
    }
  }
}

當您建立部署時,也會覆寫 appServicePlanInstanceCount 的值。 一如使用參數檔案,您也可以使用 --parameters 引數,但您可以新增所需的值來覆寫其原有的值:

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

當您建立部署時,會覆寫其中一個參數值。 您可以指定參數名稱作為 Cmdlet 的引數:

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

看看這些值會產生什麼變化。

參數 說明
location 資源群組的位置。 Bicep 檔案會將此參數指定為預設值,而且不會予以覆寫。
appServicePlanSku 此物件的 name 屬性設定為 P1v3PremiumV3 屬性設定為 tier Bicep 檔案中的預設值會被參數檔案覆寫。
appServicePlanInstanceCount 5 部署時指定的值,會覆寫預設值與參數檔案中的值。

藉由混合不同的方法來指定參數值,您可以避免在多處複製相同的參數值,但仍保有彈性,可以在需要之處予以覆寫。