使用參數檔案提供值
在上一個單元中,您已在建立部署時,於命令列上提供參數值。 當您撰寫及測試 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 屬性設定為 P1v3 ,PremiumV3 屬性設定為 tier 。 |
Bicep 檔案中的預設值會被參數檔案覆寫。 |
appServicePlanInstanceCount |
5 |
部署時指定的值,會覆寫預設值與參數檔案中的值。 |
藉由混合不同的方法來指定參數值,您可以避免在多處複製相同的參數值,但仍保有彈性,可以在需要之處予以覆寫。