相关文章推荐
豪情万千的鸭蛋  ·  定價 - Time Series ...·  1 月前    · 
傻傻的佛珠  ·  Spring Boot Features·  3 月前    · 
爱搭讪的猴子  ·  十五、.net core(.NET ...·  1 年前    · 
高大的长颈鹿  ·  Application.Automation ...·  1 年前    · 

本文介绍如何将 Azure CLI 与 Bicep 文件配合使用将资源部署到 Azure。 如果不熟悉部署和管理 Azure 解决方案的概念,请参阅 Bicep 概述

需要一个 Bicep 文件进行部署。 该文件必须为本地。

需要 Azure CLI,并将其连接到 Azure:

  • 在本地计算机上安装 Azure CLI 命令。 若要部署 Bicep 文件,需要安装 Azure CLI 2.20.0 或更高版本。
  • 使用 az login 连接到 Azure。 如果有多个 Azure 订阅,则可能还需要运行 az account set
  • 适用于 Azure CLI 的示例是针对 bash shell 编写的。 若要在 Windows PowerShell 或命令提示符中运行此示例,可能需要更改脚本的元素。

    如果未安装 Azure CLI,可以使用 Azure Cloud Shell。 有关详细信息,请参阅 从 Azure Cloud Shell 部署 Bicep 文件

    所需的权限

    若要部署 Bicep 文件或 ARM 模板,需要对要部署的资源具有写入权限,并且需要对 Microsoft.Resources/deployments 资源类型的所有操作具有访问权限。 例如,若要部署虚拟机,需要 Microsoft.Compute/virtualMachines/write Microsoft.Resources/deployments/* 权限。 What-if 操作具有相同的权限要求。

    有关角色和权限的列表,请参阅 Azure 内置角色

    可将部署目标设定为资源组、订阅、管理组或租户。 根据部署范围使用不同的命令。

  • 若要部署到资源组 ,请使用 az deployment group create

    az deployment group create --resource-group <resource-group-name> --template-file <path-to-bicep>
    
  • 若要部署到订阅,请使用 az deployment sub create

    az deployment sub create --location <location> --template-file <path-to-bicep>
    

    有关订阅级部署的详细信息,请参阅在订阅级别创建资源组和资源

  • 若要部署到管理组,请使用 az deployment mg create

    az deployment mg create --location <location> --template-file <path-to-bicep>
    

    有关管理组级部署的详细信息,请参阅在管理组级别创建资源

  • 若要部署到租户,请使用 az deployment tenant create

    az deployment tenant create --location <location> --template-file <path-to-bicep>
    

    有关租户级别部署的详细信息,请参阅在租户级别创建资源

    对于每个范围,部署 Bicep 文件的用户必须拥有创建资源所需的权限。

    部署本地 Bicep 文件

    可以部署本地计算机中的 Bicep 文件,也可以部署存储在外部的模板。 本节介绍如何部署本地 Bicep 文件。

    如果要部署到不存在的资源组,请创建该资源组。 资源组名称只能包含字母数字字符、句点、下划线、连字符和括号。 它最多可以包含 90 个字符。 名称不能以句点结尾。

    az group create --name ExampleGroup --location "Central US"
    

    若要部署本地 Bicep 文件,请在部署命令中使用 --template-file 参数。 以下示例还演示了如何设置参数值。

    az deployment group create \
      --name ExampleDeployment \
      --resource-group ExampleGroup \
      --template-file <path-to-bicep> \
      --parameters storageAccountType=Standard_GRS
    

    部署可能需要几分钟才能完成。 完成之后,会看到一条包含以下结果的消息:

    "provisioningState": "Succeeded",
    

    部署远程 Bicep 文件

    目前,Azure CLI 不支持部署远程 Bicep 文件。 你可以使用 Bicep CLI 将 Bicep 文件生成为 JSON 模板,然后将 JSON 文件加载到远程位置。

    parameters

    若要传递参数值,可以使用内联参数或参数文件。

    内联参数。

    若要传递内联参数,请在 parameters 中提供值。 例如,若要在 Bash shell 中将字符串和数组传递给 Bicep 文件,请使用:

    az deployment group create \
      --resource-group testgroup \
      --template-file <path-to-bicep> \
      --parameters exampleString='inline string' exampleArray='("value1", "value2")'
    

    如果要将 Azure CLI 与 Windows 命令提示符 (CMD) 或 PowerShell 配合使用,请以以下格式传递数组:exampleArray="['value1','value2']"

    还可以获取文件的内容并将该内容作为内联参数提供。 在文件名前加上 @

    az deployment group create \
      --resource-group testgroup \
      --template-file <path-to-bicep> \
      --parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json
    

    当需要提供配置值时,从文件中获取参数值非常有用。 例如,可以为 Linux 虚拟机提供 cloud-init 值

    arrayContent.json 格式为:

    "value1", "value2"

    若要传入对象(例如用于设置标记),请使用 JSON。 例如,Bicep 文件可能包含如下所示的参数:

        "resourceTags": {
          "type": "object",
          "defaultValue": {
            "Cost Center": "IT Department"
    

    在这种情况下,可以传入 JSON 字符串来设置参数,如以下 Bash 脚本中所示:

    tags='{"Owner":"Contoso","Cost Center":"2345-324"}'
    az deployment group create --name addstorage  --resource-group myResourceGroup \
    --template-file $bicepFile \
    --parameters resourceName=abcdef4556 resourceTags="$tags"
    

    在要传递给对象的 JSON 两侧使用双引号。

    如果要将 Azure CLI 与 Windows 命令提示符 (CMD) 或 PowerShell 配合使用,请按以下格式传递对象:

    $tags="{'Owner':'Contoso','Cost Center':'2345-324'}"
    az deployment group create --name addstorage  --resource-group myResourceGroup \
    --template-file $bicepFile \
    --parameters resourceName=abcdef4556 resourceTags=$tags
    

    可以使用变量来包含参数值。 在 Bash 中,将变量设置为所有参数值,并将其添加到部署命令。

    params="prefix=start suffix=end"
    az deployment group create \
      --resource-group testgroup \
      --template-file <path-to-bicep> \
      --parameters $params
    

    但是,如果将 Azure CLI 与 Windows 命令提示符 (CMD) 或 PowerShell 一起使用,请将变量设置为 JSON 字符串。 转义引号:$params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }'

    你可能会发现,与在脚本中以内联值的形式传递参数相比,使用包含参数值的 JSON 文件更为容易。 参数文件必须是本地文件。 Azure CLI 不支持外部参数文件。 Bicep 文件使用 JSON 参数文件。

    有关参数文件的详细信息,请参阅创建资源管理器参数文件

    若要传递本地参数文件,请指定路径和文件名。 以下示例演示名为 storage.parameters.json 的参数文件。 该文件位于运行此命令的同一目录中。

    az deployment group create \
      --name ExampleDeployment \
      --resource-group ExampleGroup \
      --template-file storage.bicep \
      --parameters storage.parameters.json
    

    在部署 Bicep 文件之前,可以预览 Bicep 文件将对环境做出的更改。 使用假设操作验证 Bicep 文件是否进行预期更改。 假设操作还验证 Bicep 文件是否有错误。

    部署模板规格

    目前,Azure CLI 不支持通过提供 Bicep 文件来创建模板规格。 但是,可使用 Microsoft.Resources/templateSpecs 资源创建 Bicep 文件来部署模板规格。创建模板规格示例演示了如何在 Bicep 文件中创建模板规格。 还可使用 Bicep CLI 将 Bicep 文件生成到 JSON 中,然后使用 JSON 模板创建模板规格。

    部署 Bicep 文件时,可以为部署指定名称。 此名称可以帮助你从部署历史记录中检索该部署。 如果没有为部署提供名称,将使用 Bicep 文件的名称。 例如,如果部署一个名为 main.bicep 的 Bicep 文件,但未指定部署名称,则该部署将命名为 main

    每次运行部署时,一个包含部署名称的条目会添加到资源组的部署历史记录中。 如果运行另一个部署并为其指定了相同的名称,则会将先前的条目替换为当前部署。 如果要在部署历史记录中保持唯一条目,请为每个部署指定唯一名称。

    若要创建唯一名称,你可以分配一个随机数。

    deploymentName='ExampleDeployment'$RANDOM
    

    或者,添加日期值。

    deploymentName='ExampleDeployment'$(date +"%d-%b-%Y")
    

    如果使用相同的部署名称对同一资源组运行并发部署,则仅会完成最后一个部署。 尚未完成的具有相同名称的任何部署都将被最后一个部署所替换。 例如,如果你运行一个名为 newStorage 的部署,它部署了一个名为 storage1 的存储帐户;与此同时,你运行了另一个名为 newStorage 的部署,它部署了一个名为 storage2 的存储帐户,则你将仅部署一个存储帐户。 生成的存储帐户名为 storage2

    但是,如果你运行一个名为 newStorage 的部署,它部署了一个名为 storage1 的存储帐户;在该部署完成时你又立即运行了另一个名为 newStorage 的部署,它部署了一个名为 storage2 的存储帐户,则你将有两个存储帐户。 一个名为 storage1,另一个名为 storage2。 但是,部署历史记录中只有一个条目。

    为每个部署指定唯一的名称时,可以并发运行它们而不会发生冲突。 如果你运行一个名为 newStorage1 的部署,它部署了一个名为 storage1 的存储帐户;与此同时,你又运行了另一个名为 newStorage2 的部署,它部署了一个名为 storage2 的存储帐户,则部署历史记录中将有两个存储帐户和两个条目。

    为避免与并发部署冲突并确保部署历史记录中的条目是唯一的,请为每个部署指定唯一的名称。

  • 若要了解如何在文件中定义参数,请参阅了解 Bicep 文件的结构和语法
  •