練習 - 在 Bicep 範本中新增參數和變數
在此練習中,您將更新先前建立的 Bicep 範本,使其:
- 接受資源位置和名稱的參數。
- 使用商務規則來選取所要部署資源的正確 SKU。
在此過程中,您將會:
- 更新範本以包含
location
參數。 - 更新範本以包含資源名稱的參數和變數。
- 使用運算式來設定參數的預設值。
- 更新範本以包含每個資源 SKU 的變數。
- 測試部署以確定範本有效。
新增位置和資源名稱參數
在 Visual Studio Code 的 main.bicep 檔案中,於檔案頂端新增下列程式碼:
param location string = 'eastus' param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}' param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}' var appServicePlanName = 'toy-product-launch-plan'
Bicep linter 會在每個參數和變數名稱底下新增黃色波浪線,以指出它們不會用在範本中。 您很快就會解決此問題。
請注意,您要使用包含字串插補、
uniqueString()
函式的運算式來定義預設參數值。 部署此範本的人可以在部署時指定值來覆寫預設參數值,但其無法覆寫變數值。也請注意,您針對 Azure App Service 方案的名稱使用變數,但針對其他名稱則使用參數。 儲存體帳戶和 App Service 應用程式需要全域唯一的名稱,但 App Service 方案名稱只需要在其資源群組中是唯一的就可以。 這項差異表示,只要部署全都進入不同的資源群組,就可以在不同的部署中使用相同的 App Service 方案名稱。
提示
您指定的
location
參數應設為westus3
。 一般而言,您會使用resourceGroup().location
屬性,在與資源群組相同的位置建立資源。 但當您使用 Microsoft Learn 沙箱時,則須使用與資源群組位置不符的特定 Azure 區域。在資源定義內找出
location
和name
屬性的設定所在之處,並予以更新為使用參數值。 完成之後,Bicep 檔案內的資源定義看起來應該像這樣:resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: 'Standard_LRS' } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: 'F1' } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
儲存對檔案所做的變更。
自動設定每個環境類型的 SKU
在 Visual Studio Code 中的 main.bicep 檔案中,將下列 Bicep 參數新增至您在上一個工作中建立的參數底下:
@allowed([ 'nonprod' 'prod' ]) param environmentType string
請注意,您要定義有一組允許值的參數,而不是指定此參數的預設值。
在宣告
appServicePlanName
變數的那一行下方,新增下列變數定義:var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
請注意,您要設定這些變數的值,方法是使用三元運算子來表達某些
if/then/else
邏輯。在資源定義內找出
sku
屬性的設定所在之處,並將其更新為使用參數值。 完成之後,Bicep 檔案內的資源定義看起來應該像這樣:resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: storageAccountName location: location sku: { name: storageAccountSkuName } kind: 'StorageV2' properties: { accessTier: 'Hot' } } resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true } }
請注意,您尚未將一切項目參數化。 您已在資源定義中直接設定一些屬性,因為您知道這些值不會隨著部署而變更。
儲存對檔案所做的變更。
驗證 Bicep 檔案
完成上述所有變更之後,main.bicep 檔案看起來應該像下列範例:
param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
@allowed([
'nonprod'
'prod'
])
param environmentType string
var appServicePlanName = 'toy-product-launch-plan'
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSkuName
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSkuName
}
}
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
如果您的檔案不符,請複製範例,或是將您的檔案調整為與範例相符。
部署更新後的 Bicep 範本
在終端中執行下列 Azure CLI 命令。
az deployment group create \
--template-file main.bicep \
--parameters environmentType=nonprod
在終端內執行下列 Azure PowerShell 命令。
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-environmentType nonprod
請注意,當您執行部署時,您會明確指定 environmentType
參數的值。 因為參數值具有效的預設值,所以不需要再指定其他參數值。
檢查您的部署
在瀏覽器中,返回 Azure 入口網站並移至您的資源群組。 您仍會看到一個成功的部署,因為此部署使用的名稱與第一個部署相同。
選取 [1 個成功] 連結。
選取名為 main 的部署,然後選取 [部署詳細資料],以展開已部署的資源清單。
請注意,新的 App Service 應用程式和儲存體帳戶已使用隨機產生的名稱進行部署。