管理模板规格

已完成

模板规格提供了一种在组织中发布和共享模板的便捷方式。 随着你越来越多地使用模板规格,了解如何管理它们就变得非常重要。

本单元介绍版本控制、如何修改和删除模板规格以及如何控制对模板规格的访问。

注意

本单元中显示的命令用于说明概念。 请暂时不要运行这些命令。 稍后你将练习在此处学到的知识。

添加版本

我们已经介绍过,一个模板规格可以有多个版本。 模板规格充当一个或多个版本的容器,每个版本都与一个模板文件相关联。 部署模板规格时,需要指定要使用的版本,从而让 Azure 资源管理器了解要检索的模板文件。

通过使用 Azure CLI 和 Azure PowerShell,可以轻松地处理多个版本。 事实上,在上一个练习中,你在部署模板规格时就已经接触到了版本。

建议对模板规格的版本管理进行仔细的规划。 需要完成两项关键的决策:要采用的版本控制方案和版本控制策略

版本控制方案

版本控制方案决定了生成版本号的方式。 常见版本控制方案包括:

  • 可将基本整数用作版本号。 例如,第一个版本可称为 1,第二个版本可称为 2,依此类推。
  • 日期也是用于编写版本号的理想选择。 例如,如果你在 2021 年 1 月 16 日发布了模板规格的第一个版本,则该版本可命名为 2021-01-16(采用 yyyy-mm-dd 格式)。 若在 3 月 3 日发布另一个版本,可将其命名为 2021-03-03
  • 语义化版本控制是软件中常用的版本控制系统,其中单个版本号包含多个部分。 每一部分都代表着关于变化性质的不同信息。

尽管你可以采用任何自己喜欢的版本控制方案,但最好选择可按合理顺序(例如编号和日期)排序的方案。

注意

Azure 存储每个版本的创建日期。 即使不采用基于日期的版本管理方案,仍可查看此信息。

版本控制策略

使用模板规格,可以灵活地选择何时创建新版本或更新现有版本。 例如,通过创建和发布名为 latest 的单个版本。可以有效地选择退出版本控制。 每当需要更改模板规格时,只需更新该版本即可。 尽管此策略可行,但并不是一种好的做法。

相反,如果要对现有模板进行不影响其使用方式的小更改,则最好不要创建新的版本。 如果这样做,就需要告知使用该模板规格的所有人新的版本号。

下面是一个通常效果不错的版本控制策略:

  • 如果对模板规格进行了重大更改,则创建一个新版本。 对模板规格的重大更改包括可能对部署模板规格的用户产生影响的任何更改。 例如,将其他资源添加到模板或更改资源的属性。
  • 每当对模板规格进行较小更改(有时称为“修补程序”)时,更新现有的模板规格版本。
  • 删除不再相关或者你不希望任何人使用的旧版本。

提示

请考虑模板规格的用户,且务必考量他们对模板规格的预期。 如果用户在多次部署模板规格后都获得同一个结果,然后在添加修补程序后再次部署它并获得不同的结果,他们可能会感到惊讶。 请尝试尽可能地避免用户获得意外的结果。

版本说明

在创建模板规格的新版本时,可以选择为其给出版本说明。 提供版本说明是很好的做法,即使不需要。 版本说明汇总所做的更改,可帮助所有使用模板规格的人选择最符合其需求的版本。

对模板规格进行更改

模板规格是 Azure 资源,因此可以像管理任何其他资源一样对其进行管理。 也就是说,可以查看模板规格的详细信息、对模板规格进行更新并像平常一样删除模板规格。

例如,可以使用 Get-AzTemplateSpec cmdlet 列出模板规格的版本:

Get-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec

可以使用同样的 cmdlet 查看模板规格版本。 添加 -Version 参数以获取版本的详细信息:

Get-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0

可以通过从 Versions 数组中读取 MainTemplate 属性来访问 JSON 模板:

(Get-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0 `
).Versions[0].MainTemplate

例如,可以使用 az ts show 命令列出模板规格的版本:

az ts show \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec

可以使用同样的命令查看模板规格版本。 添加 --version 参数以获取版本的详细信息:

az ts show \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec \
  --version 1.0

输出中包含 JSON 模板。

备注

将 Bicep 文件发布到模板规格时,它将转换为 JSON。 你无法看到原始 Bicep 文件,所以最好将其保存到其他位置。

若要更新现有的模板规格,请使用 Set-AzTemplateSpec cmdlet。 例如,可以使用此 cmdlet 将修补程序应用于已发布的版本:

Set-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0 `
  -TemplateFile azuredeploy.json

可以使用 Remove-AzTemplateSpec cmdlet 删除模板规格版本:

Remove-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0

若要更新现有的模板规格,请使用 az ts update 命令。 例如,可以使用此命令将修补程序应用于已发布的版本:

az ts update \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec \
  --version 1.0 \
  --template-file azuredeploy.json

可以使用 az ts delete 命令删除模板规格版本:

az ts delete \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec \
  --version 1.0

导出模板规格

将模板发布为模板规格后,可以将其导出。 导出模板规格会将模板文件下载到本地计算机。 在本地计算机上,可以编辑模板文件,或者只是对其进行检查,以便了解它的作用。

提示

如果模板规格包含链接模板,导出模板规格时还会下载链接模板。 该操作甚至会保留文件夹结构。

重要

将 Bicep 文件发布为模板规格时,Bicep 代码将转换为 JSON 模板。 将 Bicep 代码转换为 JSON 的过程会删除 Bicep 文件中某些信息。 例如,注释、资源的符号名称以及定义资源的顺序可能会在 JSON 中丢失或者产生变化。 也就是说,你无法简单地将 Bicep 文件发布为模板规格并拿回原始的 Bicep 文件(也被称为“往返”)。 建议在 Git 等代码存储库中保留原始 Bicep 代码的副本,尤其是在使用模板规格时。

若要导出模板规格,请使用 Export-AzTemplateSpec cmdlet。 使用 -OutputFolder 值,指定模板文件的保存位置:

Export-AzTemplateSpec `
  -ResourceGroupName MyResourceGroup `
  -Name MyTemplateSpec `
  -Version 1.0 `
  -OutputFolder ./mytemplate

若要导出模板规格,请使用 az ts export 命令。 使用 --output-folder 值,指定模板文件的保存位置:

az ts export \
  --resource-group MyResourceGroup \
  --name MyTemplateSpec \
  --version 1.0 \
  --output-folder ./mytemplate

控制对模板规格的访问

因为模板规格是 Azure 资源,所以它们使用 Azure 的标识和访问管理 (IAM)。 当某位用户部署模板规格时,Azure 会先检查该用户是否有权读取模板规格。

备注

若要部署模板规格,用户需要具备:

  • 能读取模板规格的访问权限。
  • 能部署到他们要求部署到的资源组或其他范围的访问权限。

Azure 会在部署开始之前检查这两个条件。