Azure CLI 命令

本文介绍可在 Bicep CLI 中使用的命令。 可以使用 Azure CLI 或直接调用 Bicep CLI 命令来执行这些命令。 每种方法都需要不同的安装过程。 有关安装的详细信息,请参阅 Azure CLIAzure PowerShell

本指南演示如何在 Azure CLI 中运行命令。 在 Azure CLI 中运行命令时,请启动 az它们。 如果不使用 Azure CLI,请在每个命令开始时运行命令 az 。 例如,az bicep build 变为 bicep buildaz bicep version 变为 bicep --version

内部版本

build命令将 Bicep 文件转换为 JSON Azure 资源管理器 模板(ARM 模板)。 通常,无需运行此命令,因为它会在部署 Bicep 文件时自动运行。 如果要查看从 Bicep 文件创建的 JSON ARM 模板,请手动运行它。

使用以下任一Bicep功能会自动启用语言版本 2.0 代码生成:

下面的示例将名为 main.bicep 的 Bicep 文件转换为名为 main.json 的 ARM 模板 。 新文件在 Bicep 文件所在的同一目录中创建:

bicep build main.bicep

下一个示例将main.json保存到其他目录:

bicep build main.bicep --outdir c:\jsontemplates

以下示例指定要创建的文件的名称和位置:

bicep build main.bicep --outfile c:\jsontemplates\azuredeploy.json

若要将文件输出到 stdout,请使用:

bicep build main.bicep --stdout

如果 Bicep 文件包含引用外部注册表的模块,该 build 命令会自动调用 restore。 该 restore 命令从注册表中获取文件,并将其存储在本地缓存中。

注意

restore 命令不会刷新缓存。 有关详细信息,请参阅 restore

若要防止自动还原,请使用 --no-restore 开关:

bicep build --no-restore <bicep-file>

若要使用该 --no-restore 开关,必须具有 Bicep CLI 0.4.X 或更高版本。

如果其中一个外部模块尚未被缓存,则使用 --no-restore 开关的构建过程将失败:

The module with reference "br:exampleregistry.azurecr.cn/bicep/modules/storage:v1" has not been restored.

收到此错误时,请运行不带开关的build--no-restore命令,或先运行bicep restore

build-params

build-params 命令将 .bicepparam 文件生成到 JSON 参数文件中:

bicep build-params params.bicepparam

此命令将 params.bicepparam 参数文件转换为 params.json JSON 参数文件。

主机

Bicep CLI v0.42.1 或更高版本中提供了 console 命令。 它为Bicep表达式提供交互式读取Eval-Print 循环(REPL)环境。 它允许你在交互式控制台会话中试验Bicep函数和表达式,在创作或测试Bicep逻辑(如表达式、函数和用户定义的函数)时特别有用。 它支持以下功能:

  • Interactive Expression Evaluation:输入Bicep表达式并立即查看其计算结果
  • 变量声明:使用“var name = 表达式语法”定义变量,并在后续表达式中重复使用它们
  • 多行输入:支持具有自动结构完成检测的复杂多行表达式
  • 语法突出显示:输入和输出的实时语法突出显示

console 命令具有以下限制:

  • 不支持需要Azure上下文的表达式,例如 resourceGroup()
  • 不支持 for-loop 表达式,例如 [for i in range(0, x): i]
  • 控制台会话之间没有持久状态
  • 无完成支持

使用以下命令启动Bicep控制台会话:

bicep console

若要退出控制台,请按 ESC 或使用 exit 命令。

示例

简单表达式

> 1 + 2
3

> 'Hello, ${'World!'}'
'Hello, World!'

> length(['a', 'b', 'c'])
3

变量声明

> var myName = 'John'
> var greeting = 'Hello, ${myName}!'
> greeting
'Hello, John!'

多行表达式

控制台会自动检测表达式在结构上完成的时间:

> var config = {
  name: 'myApp'
  version: '1.0.0'
  settings: {
    debug: true
    timeout: 30
  }
}
> config.settings.debug
true

复杂表达式

Lambda
> var users = [
  { name: 'Alice', age: 30 }
  { name: 'Bob', age: 25 }
]
> map(users, user => user.name)
['Alice', 'Bob']

> filter(users, user => user.age > 26)
[
  {
    age: 30
    name: 'Alice'
  }
]
用户定义的类型和函数
> type PersonType = {
  name: string
  age: int
}
> func sayHi(person PersonType) string => 'Hello ${person.name}, you are ${person.age} years old!'
> var alice = {
  name: 'Alice'
  age: 30
}
> [ sayHi(alice), sayHi({ name: 'Bob', age: 25 })]
[
  'Hello Alice, you are 30 years old!'
  'Hello Bob, you are 25 years old!'
]

从文件加载内容

Bicep控制台还支持 load*() 函数。 在评估bicep console函数时,从中运行命令的目录用作load*()

以下示例演示如何使用 loadDirectoryFileInfo() 加载目录中所有Bicep文件的相关信息:

> loadDirectoryFileInfo('./modules/', '*.bicep')
[
  {
    relativePath: 'C:/Bicep/modules/appService.bicep'
    baseName: 'appService.bicep'
    extension: '.bicep'
  }
]

管道和标准输入/输出重定向

控制台命令支持评估通过管道或重定向的标准输入提供的表达式,从而启用以下方案:

  • 通过回显传递表达式文本
  • 编写将表达式馈送到控制台中的脚本
  • 快速测试生成的或转换的Bicep代码片段

Powershell

# piped input
"parseCidr('10.144.0.0/20')" | bicep console

Bash

# piped input
echo "parseCidr('10.144.0.0/20')" | bicep console
# stdin redirection from file content
bicep console < test.txt

还支持多行输入:

"{
> foo: 'bar'
> }.foo" | bicep console

输出为 'bar'

还支持输出重定向:

"toObject([{name:'Evie', age:4},{name:'Casper', age:3}], x => x.name)" | bicep console > output.json
more output.json

输出为:

{
  Evie: {
    name: 'Evie'
    age: 4
  }
  Casper: {
    name: 'Casper'
    age: 3
  }
}

反向编译

decompile 命令将 JSON ARM 模板转换为 Bicep 文件:

bicep decompile main.json

此命令在与 main.json 相同的目录中创建名为 main.bicep 的文件。 如果为 main。bicep存在于同一目录中,请使用 --force 开关覆盖现有Bicep文件。

有关使用此命令的详细信息,请参阅 将 JSON ARM 模板反编译为 Bicep

decompile-params

decompile-params 命令将 JSON 参数文件反编译到 .bicepparam 参数文件。

bicep decompile-params azuredeploy.parameters.json --bicep-file ./dir/main.bicep

此命令将 azuredeploy.parameters.json 参数文件反编译azuredeploy.parameters.bicepparam 文件中。 使用 --bicep-file 指定在 .bicepparam 声明中引用的Bicep文件(相对于 using 文件)的路径。

format

format 命令格式化 Bicep 文件,使其遵循建议的样式约定。 将其视为Bicep文件的代码格式化程序或“更漂亮”。 它具有与 Visual Studio Code 中的 SHIFT+ALT+F 快捷方式相同的功能。

bicep format main.bicep

generate-params

generate-params 命令从给定的 Bicep 文件中生成参数文件,并在存在现有参数文件时对其进行更新。

bicep generate-params main.bicep --output-format bicepparam --include-params all

此命令创建名为 main.bicepparam 的 Bicep 参数文件。 参数文件包含 Bicep 文件中的所有参数,无论是否配置了默认值。

bicep generate-params main.bicep --outfile main.parameters.json

此命令创建一个名为 main.parameters.json的参数文件。 该参数文件仅包含在 Bicep 文件中配置的没有默认值的参数。

安装

install 命令将 Bicep CLI 添加到本地环境,并且只能通过 Azure CLI 使用。 有关详细信息,请参阅安装 Bicep 工具

若要安装最新版本,请运行以下命令:

N/A

若要安装特定版本,请使用以下命令:

N/A

jsonrpc

jsonrpc 命令使用 JSON-RPC 接口启动 Bicep CLI,从而实现与Bicep文件的快速编程交互。 有关详细用法、线路格式、可用方法和连接选项,请参阅 Bicep CLI jsonrpc 命令

lint

lint 命令返回 Bicep 文件的错误和 linter 规则 冲突。

bicep lint main.bicep

如果 Bicep 文件包含引用外部注册表的模块,该 lint 命令会自动调用 restore。 该 restore 命令从注册表中获取文件,并将其存储在本地缓存中。

注意

restore 命令不会刷新缓存。 有关详细信息,请参阅 restore

若要防止自动还原,请使用 --no-restore 开关:

bicep lint --no-restore <bicep-file>

如果其中一个外部模块尚未被缓存,则使用 --no-restore 开关的 lint 过程将失败:

The module with reference "br:exampleregistry.azurecr.cn/bicep/modules/storage:v1" has not been restored.

出现此错误时,请运行不含 lint 开关的 --no-restore 命令,或先运行 bicep restore

list-versions

list-versions 命令返回 Bicep CLI 的所有可用版本。 使用此命令查看是否要升级安装新版本。 此命令只能通过 Azure CLI 使用。

N/A

发布

publish 命令可将模块添加到注册表。 Azure容器注册表必须存在,并且发布到注册表的帐户必须具有正确的权限。 有关设置模块注册表的更多信息,请参阅对 Bicep 模块使用专用注册表。 若要发布模块,该帐户必须具有正确的配置文件和权限以便访问注册表。 你可以在 Bicep 配置文件中设置配置文件和凭据优先级,以用于向注册表证明身份。

将文件发布到注册表后,可以在模块中引用文件

必须具有 Bicep CLI 0.14.X 或更高版本才能使用 publish 命令和 --documentationUri/-d 参数。

若要将模块发布到注册表,请使用:

bicep publish <bicep-file> --target br:<registry-name>.azurecr.io/<module-path>:<tag> --documentationUri <documentation-uri>

例如:

bicep publish storage.bicep --target br:exampleregistry.azurecr.cn/bicep/modules/storage:v1 --documentationUri https://www.contoso.com/exampleregistry.html

此命令publish无法识别bicepconfig.json文件中指定的别名。 提供完整的模块路径。

警告

发布到同一目标会覆盖旧模块。 更新时递增版本。

恢复

当Bicep文件使用发布到注册表的模块时,restore 命令将从注册表中获取所有所需模块的副本。 该命令会将这些副本存储在本地缓存中。 只有当外部文件在本地缓存中可用时,才能生成 Bicep 文件。 通常不需要运行还原,因为它由生成进程自动触发。

若要将外部模块还原到本地缓存,该帐户必须具有正确的配置文件和权限以便访问注册表。 你可以在 Bicep 配置文件中设置配置文件和凭据优先级,以用于向注册表证明身份。

若要使用此命令 restore ,必须具有 Bicep CLI 0.14.X 或更高版本。

若要手动还原文件的外部模块,请使用:

bicep restore <bicep-file>

你提供的Bicep文件是要部署的文件。 必须包含链接到注册表的模块。 例如,可以还原以下文件:

module stgModule 'br:exampleregistry.azurecr.cn/bicep/modules/storage:v1' = {
  name: 'storageDeploy'
  params: {
    storagePrefix: 'examplestg1'
  }
}

可在以下位置找到本地缓存:

  • 在 Windows 上

    %USERPROFILE%\.bicep\br\<registry-name>.azurecr.cn\<module-path\<tag>
    
  • 在 Linux 上

    /home/<username>/.bicep
    
  • 在 Mac 上

    ~/.bicep
    

如果已缓存模块,则 restore 命令不会刷新缓存。 若要刷新缓存,可以从缓存中删除模块路径,也可以将 --force 开关与命令一起使用 restore

快照

通过使用 Bicep CLI v0.41.2 或更高版本,可以使用 snapshot 命令从 .bicepparam 文件创建Bicep部署的规范化确定性表示形式。 可以将此快照与以后的快照进行比较,以了解重构会导致哪些更改,而无需将任何更改部署到Azure。 此命令特别适用于:

  • Visual Diffs:确切地了解重构(如将代码移动到模块)如何更改基础资源定义。
  • 复杂表达式:了解复杂字符串或变量在部署之前实际计算的内容。
  • CI/CD 验证:在拉取请求期间自动捕获基础结构逻辑中的意外更改。

创建快照

此命令生成一个 .snapshot.json 文件。 此文件是“规范化”的,这意味着它会消除模块边界等干扰,以便你可以专注于资源本身。

bicep snapshot --mode overwrite <bicep-param-file>

以下 JSON 文件显示了快照示例:

{
  "predictedResources": [
    {
      "id": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Storage/storageAccounts/stmyappstorage001', subscription().subscriptionId, resourceGroup().name)]",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "stmyappstorage001",
      "apiVersion": "2025-01-01",
      "location": "chinanorth3",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    }
  ],
  "diagnostics": []
}

验证更改

创建快照后,在验证模式下运行命令。 它将当前Bicep代码与保存的快照进行比较,并显示视觉差异,这与 what-if 命令非常类似,但完全是本地的。

bicep snapshot --mode validate <bicep-param-file>

示例输出如下所示:

PS C:\bicep> bicep snapshot --mode validate main.bicepparam
Snapshot validation failed. Expected no changes, but found the following:

Scope: <unknown>

  ~ [format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Storage/storageAccounts/stmyappstorage001', subscription().subscriptionId, resourceGroup().name)]
    ~ apiVersion: "2025-01-01" => "2025-06-01"
    ~ sku.name:   "Standard_LRS" => "Standard_GRS"

“快照验证失败”表示两个快照之间的差异。

Bicep CLI 快照和 What-if 具有以下差异:

功能 bicep snapshot az deployment group what-if
执行 仅限本地 (脱机) 基于云的 (Online)
比较 比较代码与保存的文件 比较代码与实时Azure状态
Speed 极快 慢(需要 API 调用)
用例 重构和逻辑测试 最终的部署前检查

提供上下文

运行Bicep快照时,CLI 会对代码执行本地评估。 由于它不与Azure通信,因此无法“询问”云中的订阅 ID 或当前资源组名称。

如果代码使用环境函数(例如 subscription().id),除非通过 CLI 参数提供特定上下文,否则快照将失败或返回占位符。

若要模拟实际的部署环境,可以传递以下标志:

论点 Purpose 示例值
--subscription-id 替换由 返回的值 00000000-1111-2222-3333-444444444444
--resource-group 替换由 返回的值 my-production-rg
--location 设置 的默认位置 deployment().location chinanorth2
--tenant-id 替换由 返回的值 72f988bf-86f1-41af-91ab-2d7cd011db47
--management-group 替换由 返回的值 my-corp-mg
bicep snapshot main.bicepparam \
  --subscription-id 00000000-0000-0000-0000-000000000000 \
  --resource-group my-temp-rg \
  --location eastus \
  --mode overwrite

升级

upgrade 命令使用最新版本更新已安装的版本。 此命令只能通过 Azure CLI 使用。

N/A

版本

version 命令返回已安装的版本:

bicep --version

如果未安装 Bicep CLI,则会看到一条错误消息,指出找不到Bicep CLI。

该命令显示版本号:

Bicep CLI version 0.29.45 (57a44c0230)

后续步骤

若要详细了解如何部署 Bicep 文件,请参阅: