Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本文介绍如何将Azure PowerShell与 Bicep 文件配合使用,将资源部署到Azure。 如果不熟悉部署和管理Azure解决方案,请参阅 什么是 Bicep?
先决条件
你需要一个 Bicep 文件才能进行部署,并且该文件必须是本地文件。 还需要Azure PowerShell并连接到Azure:
- 在本地计算机上安装Azure PowerShell cmdlet。 若要部署 Bicep 文件,需要 Azure PowerShell 5.6.0 或更高版本。 有关详细信息,请参阅 Get started with Azure PowerShell。
- 安装 Bicep CLI。 必须手动手动安装 Bicep CLI,因为Azure PowerShell不会自动安装它。
-
使用
Connect-AzAccount -Environment AzureChinaCloud -Environment AzureChinaCloud连接到Azure。 如果有多个 Azure 订阅,则可能需要运行Set-AzContext。 有关详细信息,请参阅 使用多个Azure订阅。
所需的权限
若要部署 Bicep 文件或 Azure Resource Manager (ARM) 模板,您需要对要部署的资源具有写入权限,并具有对Microsoft.Resources/deployments资源类型的所有操作的访问权限。 例如,若要部署虚拟机,需要 Microsoft.Compute/virtualMachines/write 和 Microsoft.Resources/deployments/* 权限。 What-if 操作具有相同的权限要求。
Azure CLI版本 2.76.0 或更高版本和Azure PowerShell版本 13.4.0 或更高版本引入了 ValidationLevel 开关,以确定 ARM 在此过程中如何彻底验证 Bicep 模板。 有关详细信息,请参阅 What-if 命令
有关角色和权限的列表,请参阅 Azure 内置角色。
部署范围
可将部署目标设定为资源组、订阅、管理组或租户。 根据部署的范围使用不同的命令,并且部署 Bicep 文件的用户必须具有为每个范围创建资源所需的权限。
要部署到资源组,请使用
New-AzResourceGroupDeployment:New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-bicep>若要部署到订阅,请使用 ,它是
New-AzSubscriptionDeploymentcmdlet 的别名。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 "China North"
若要部署本地 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 文件,以及 Bicep CLI 0.22.X 或更高版本。 在 Bicep 参数文件中使用 using 语句时,无需在为 -TemplateFile 开关指定 Bicep 参数文件时提供 -TemplateParameterFile 开关。
以下示例演示名为 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 将 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 的存储帐户,您实际上只部署了一个存储帐户。 生成的storage帐户命名为 storage2。
但是,如果运行名为 newStorage 的部署,该部署的存储帐户名为 storage1,并立即在第一个部署完成后运行另一个名为 newStorage 的部署,该部署的存储帐户名为 storage2,则您会有两个存储帐户。 一个名为 storage1,另一个名为 storage2。 但是,部署历史记录中只有一个条目。
为每个部署指定唯一的名称时,可以并发运行它们而不会发生冲突。 如果运行名为 newStorage1 的部署,该部署storage帐户名为 storage1,并运行另一个名为 newStorage2 的部署,该部署同时部署名为 storage2 的storage帐户,则部署历史记录中有两个storage帐户和两个条目。
为避免与并发部署冲突并确保部署历史记录中的条目是唯一的,请为每个部署指定唯一的名称。
后续步骤
若要了解如何在文件中定义参数,请参阅了解 Bicep 文件的结构和语法。