使用 Azure PowerShell 部署 Bicep 檔案
本文說明如何使用 Azure PowerShell 與 Bicep 檔案,將您的資源部署至 Azure。 如果您不熟悉部署和管理 Azure 解決方案,請參閱 什麼是 Bicep?。
必要條件
您需要 Bicep 檔案才能部署,而且檔案必須是本機檔案。 您也需要 Azure PowerShell 並連線到 Azure:
- 在本機電腦上安裝 Azure PowerShell Cmdlet。 若要部署 Bicep 檔案,您需要 Azure PowerShell 5.6.0 版或更新版本。 如需詳細資訊,請參閱開始使用 Azure PowerShell。
- 安裝 Bicep CLI。 您必須手動安裝 Bicep CLI,因為 Azure PowerShell 不會自動安裝它。
- 使用
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 內建角色。
部署範圍
您可以將部署的目標設為資源群組、訂用帳戶、管理群組或租用戶。 視部署的範圍而定,您會使用不同的命令,而部署 Bicep 檔案的用戶必須具有為每個範圍建立資源所需的許可權。
若要部署至 資源群組,請使用
New-AzResourceGroupDeployment
:New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-bicep>
若要部署至 訂用帳戶,請使用
New-AzSubscriptionDeployment
,這是 Cmdlet 的New-AzDeployment
別名:New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-bicep>
如需訂用帳戶層級部署的詳細資訊,請參閱 使用 Bicep 將資源部署至訂用帳戶。
若要部署至 管理群組,請使用
New-AzManagementGroupDeployment
。New-AzManagementGroupDeployment -ManagementGroupId <management-group-id> -Location <location> -TemplateFile <path-to-bicep>
如需管理群組層級部署的詳細資訊,請參閱 使用 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 值。
如果您需要傳入對象的陣列,請在 Azure 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 參數檔案
相較於在腳本中傳遞參數做為內嵌值,您可能會發現使用 Bicep 參數檔案 或 包含參數值的 JSON 參數檔案 會比較容易。 Bicep 參數檔案必須是本機檔案,而 JSON 範本檔案則位於在線某處。 如需參數檔案的詳細資訊,請參閱 建立 Bicep 部署的參數檔案。
您可以使用 Bicep 參數檔案,搭配 Azure PowerShell 10.4.0 版或更新版本和 Bicep CLI 0.22.X 版或更新版本來部署 Bicep 檔案。 using
使用 Bicep 參數檔案內的 語句,在指定-TemplateParameterFile
參數的 Bicep 參數檔案時,不需要提供 -TemplateFile
參數。
下列範例會顯示名為 storage.bicepparam 的參數檔案。 檔案位於命令執行所在的相同目錄中:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateParameterFile storage.bicepparam
JSON 參數檔案
JSON 參數檔案可以具有可存取 URI 的本機或外部檔案。
若要傳遞本機參數檔案,請使用 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 和 JSON 範本來建立範本規格,將 Bicep 檔案建置至 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 檔案的結構和語法。