使用 Bicep 和 Azure PowerShell 部署資源
本文說明如何使用 Azure PowerShell 與 Bicep 檔案,將您的資源部署至 Azure。 如果您不熟悉部署和管理 Azure 解決方案的相關概念,請參閱 Bicep 概觀。
必要條件
您需要一個供部署的 Bicep 檔案。 此檔案必須存於本機。
您需要 Azure PowerShell 並連線到 Azure:
- 在本機電腦上安裝 Azure PowerShell Cmdlet。 若要部署 Bicep 檔案,您需要 Azure PowerShell 5.6.0 版或更新版本。 如需詳細資訊,請參閱開始使用 Azure PowerShell。
- 安裝 Bicep CLI。 Azure PowerShell 不會自動安裝 Bicep CLI。 相反地,您必須手動安裝 Bicep CLI (部分機器翻譯)。
- 使用 Connect-AzAccount 來連線至 Azure。 如果您有多個 Azure 訂用帳戶,則可能還需要執行 Set-AzContext。 如需詳細資訊,請參閱使用多個 Azure 訂用帳戶。
如果尚未安裝 PowerShell,您可以使用 Azure Cloud Shell。 如需詳細資訊,請參閱從 Azure Cloud Shell 部署 Bicep 檔案。
所需的權限
若要部署 Bicep 檔案或 ARM 範本,您需要對即將進行部署的資源具備寫入存取權,並可存取 Microsoft.Resources/部署資源類型上的所有作業。 例如,若要部署虛擬機器,您需要 Microsoft.Compute/virtualMachines/write
和 Microsoft.Resources/deployments/*
權限。 假設狀況作業具有相同的權限需求。
如需角色與權限的清單,請參閱 Azure 內建角色。
部署範圍
您可以將部署的目標設為資源群組、訂用帳戶、管理群組或租用戶。 視部署的範圍而定,您可以使用不同的命令。
若要部署至資源群組,請使用 New-AzResourceGroupDeployment:
New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-bicep>
若要部署至訂閱,請使用 New-AzSubscriptionDeployment,這是
New-AzDeployment
Cmdlet 的別名:New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-bicep>
如需訂用帳戶層級部署的詳細資訊,請參閱在訂用帳戶層級建立資源群組和資源。
若要部署至管理群組,請使用 New-AzManagementGroupDeployment。
New-AzManagementGroupDeployment -ManagementGroupId <management-group-id> -Location <location> -TemplateFile <path-to-bicep>
如需管理群組層級部署的詳細資訊,請參閱在管理群組層級建立資源。
若要部署至租用戶,請使用 New-AzTenantDeployment。
New-AzTenantDeployment -Location <location> -TemplateFile <path-to-bicep>
如需租用戶層級部署的詳細資訊,請參閱在租用戶層級建立資源。
針對每個範圍,部署範本的使用者必須擁有建立資源的必要權限。
部署本機 Bicep 檔案
您可以從本機電腦或外部儲存的 Bicep 檔案部署 Bicep 檔案。 本節說明如何部署本機 Bicep 檔案。
如果您要部署到不存在的資源群組,請先建立資源群組。 資源群組的名稱只能包含英數字元、句點 (.)、底線、連字號及括弧。 最多可有 90 個字元。 名稱不能以句點結尾。
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
若要部署本機 Bicep 檔案,請在部署命令中使用 -TemplateFile
參數。
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile <path-to-bicep>
部署需要幾分鐘的時間才能完成。
部署遠端 Bicep 檔案
目前 Azure PowerShell 不支援部署遠端 Bicep 檔案。 請使用 Bicep CLI 將 Bicep 檔案組建至 JSON 範本上,然後將該 JSON 檔案載入至遠端位置。
參數
若要傳遞參數值,可以使用內嵌參數或參數檔案。 參數檔案可以是 Bicep 參數檔案或 JSON 參數檔案。
內嵌參數
若要傳遞內嵌參數,請使用 New-AzResourceGroupDeployment
命令提供參數名稱。 例如,若要將字串和陣列傳遞至 Bicep 檔案,請使用:
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-exampleString "inline string" `
-exampleArray $arrayParam
您可以使用 TemplateParameterObject
參數來傳遞包含範本參數的哈希表。
$params = @{
exampleString = "inline string"
exampleArray = "value1", "value2"
}
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-TemplateParameterObject $params
您也可以取得檔案內容,並提供該內容作為內嵌參數。
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
-exampleArray $arrayParam
當您需要提供組態值時,從檔案取得參數值會很有幫助。 例如,您可以提供 Linux 虛擬機器的 cloud-init 值。
如果您需要傳入物件的陣列,請在 PowerShell 中建立雜湊表,並將其新增至陣列。 在部署期間,將該陣列做為參數傳遞。
$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-exampleArray $subnetArray
Bicep 參數檔案
相對於在指令碼中將參數做為內嵌值傳遞,使用包含該參數值的 .bicepparam
檔案或 JSON 參數檔案可能較為容易。 Bicep 參數檔案必須是本機檔案。
透過 Azure PowerShell 10.4.0 版或更新版本,以及 Bicep CLI 0.22.X 版或更新版本,您可以使用 Bicep 參數檔案來部署 Bicep 檔案。 若使用 Bicep 參數檔案內的 using
陳述式,在指定 -TemplateParameterFile
參數的 Bicep 參數檔案時,就不需要提供 -TemplateFile
參數。
下列範例會顯示名為 storage.bicepparam 的參數檔案。 該檔案必須位於執行此命令的相同目錄中。
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateParameterFile storage.bicepparam
如需參數檔案的詳細資訊,請參閱建立 Resource Manager 參數檔案。
JSON 參數檔案
JSON 參數檔案可以是本機檔案,或具有可存取 URI 的外部檔案。 如需參數檔案的詳細資訊,請參閱建立 Resource Manager 參數檔案。
若要傳遞本機參數檔案,請使用 TemplateParameterFile
參數與 JSON 參數檔案:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\BicepFiles\storage.bicep `
-TemplateParameterFile c:\BicepFiles\storage.parameters.json
若要傳遞外部參數檔案,請使用 TemplateParameterUri
參數:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\BicepFiles\storage.bicep `
-TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json
TemplateParameterUri
參數僅支援 JSON 參數檔案,而不支援 .bicepparam
檔案。
您可以在相同的部署作業中使用內嵌參數和位置參數檔案。 如需詳細資訊,請參閱 參數優先順序。
預覽變更
在部署 Bicep 檔案之前,您可以預覽 Bicep 檔案將對您的環境進行的變更。 使用假設狀況作業來確認 Bicep 檔案會進行您預期的變更。 假設狀況也能驗證 Bicep 檔是否有錯誤。
部署範本規格
目前,Azure PowerShell 不支援藉由提供 Bicep 檔來建立範本規格。 不過,您可以使用 Microsoft.Resources/templateSpecs 資源建立 Bicep 檔案,藉此部署範本規格。建立範本規格範例示範了如何在 Bicep 檔案中建立範本規格。 您也可以使用 Bicep CLI 將 Bicep 檔案組建至 JSON,然後使用 JSON 範本建立範本規格。
部署名稱
部署 Bicep 檔案時,您可以為該部署取名。 此名稱可協助您從部署歷程記錄中擷取部署。 如果您未提供部署的名稱,則會使用 Bicep 檔案的名稱。 例如,如果您部署名稱為 main.bicep
的 Bicep,且未指定部署名稱,則系統會將部署命名為 main
。
每次執行部署時,資源群組的部署歷程記錄便會新增一筆具有部署名稱的項目。 如果您執行另一個部署並提供相同名稱,則系統會將先前的項目取代為目前的部署。 如果您想在部署歷程記錄中維護唯一的項目,請為每個部署提供唯一的名稱。
若要建立唯一的名稱,您可以指派隨機數字。
$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix
或者,加入日期值。
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"
如果您使用相同的部署名稱,同時對同一個資源群組執行部署,則只會完成最後一個部署。 具有相同名稱但尚未完成的任何部署,都會由最後一個部署所取代。 例如,如果您執行名為 newStorage
的部署來部署名為 storage1
的儲存體帳戶,且同時執行另一個名為 newStorage
的部署來部署名為 storage2
的儲存體帳戶,則您只會部署一個儲存體帳戶。 產生的儲存體帳戶名稱為 storage2
。
但是,如果您執行名為 newStorage
的部署來部署名為 storage1
的儲存體帳戶,並在其完成後立即執行另一個名為 newStorage
的部署來部署名為 storage2
的儲存體帳戶,則您會具有兩個儲存體帳戶。 一個名稱為 storage1
,另一個名稱則為 storage2
。 但是,您在部署歷程記錄中只會具有一個項目。
若您為每個部署指定唯一的名稱,便可以同時執行這些部署,而不會發生衝突。 如果您執行名為 newStorage1
的部署來部署名為 storage1
的儲存體帳戶,且同時執行另一個名為 newStorage2
的部署來部署名為 storage2
的儲存體帳戶,則您會具有兩個儲存體帳戶,且在部署歷程記錄中會具有兩個項目。
為了避免因同時部署而發生衝突,並確保部署歷程記錄中項目的唯一性,請為每個部署提供唯一的名稱。
下一步
- 若要了解如何在檔案中定義參數,請參閱了解 Bicep 檔案的結構和語法。