创建和发布模板规格

已完成

让我们看看如何创建和发布模板规格。

创建模板

若要创建将用作模板规格的模板,请照常编写一个 Azure 资源管理器模板(ARM 模板)。 可以包含参数、变量、资源和输出。

可以使用链接模板,以便在单独的文件中定义部署的各个部分。 使用模板规格时,链接模板可以嵌入到模板规格中,还可以从主模板引用它。

请务必记住一点:你的模板对于组织中任何人来说都要易于理解和使用,尤其是其参数。 请务必使用清晰易懂的参数名称。 使用参数属性和模板元数据提供有关参数应包含的值的信息,如以下示例所示:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "environmentType": {
      "type": "string",
      "allowedValues": [
        "Production",
        "NonProduction"
      ],
      "metadata": {
        "description": "The type of the environment to deploy. This will determine the SKUs and cost of the resources."
      }
    },
    "key": {
      "type": "secureString",
      "metadata": {
        "description": "The secret key to use."
      }
    },
    "location": {
      "type": "string",
      "metadata": {
        "description": "The Azure region into which the resources should be deployed."
      }
    },
    "sqlServerCount": {
      "type": "int",
      "maxValue": 5,
      "metadata": {
        "description": "The number of Azure SQL logical servers to create."
      }
    }
  },
  "resources": []
}

在示例中,模板参数使用 allowedValuesmaxValuedescription 属性来明确参数用途以及设置这些参数值的影响。 该模板还包括用于指示 key 参数包含机密数据的 secureString 类型。

请务必记住一点:你的模板对于组织中任何人来说都要易于理解和使用,尤其是参数。 请务必使用清晰易懂的参数名称。 使用参数修饰器提供有关参数应包含的值的信息,如以下示例所示:

@description('The type of the environment to deploy. This will determine the SKUs and cost of the resources.')
@allowed([
  'Production'
  'NonProduction'
])
param environmentType string

@secure()
@description('The secret key to use.')
param key string

@description('The Azure region into which the resources should be deployed.')
param location string

@description('The number of Azure SQL logical servers to create.')
@maxValue(5)
param sqlServerCount int

在示例中,模板参数使用 @allowed@maxValue@description 修饰器来明确参数用途以及设置这些参数值的影响。 该模板还包括 secure 修饰器,该修饰器用于指示 key 参数包含机密数据。

当有人使用 Azure 门户部署模板规格时,门户会:

  • 显示参数名称和说明。
  • 隐藏安全参数的文本条目。
  • 强制应用已定义的允许值、长度限制和值限制。

此屏幕截图展示的是参数值的条目:

Screenshot that shows the Azure portal interface for entering parameter values for a template spec deployment.

请务必考虑用户如何使用你的模板规格,并确保参数清晰易懂。

将模板规格发布到 Azure

编写模板后,请勿将模板提交到 Azure 来进行部署,而是应当发布模板规格。

重要

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

若要创建模板规格,请使用 New-AzTemplateSpec cmdlet。 以下示例演示如何为存储帐户模板创建模板规格:

New-AzTemplateSpec `
  -Name StorageWithoutSAS `
  -Location westus `
  -DisplayName 'Storage account with SAS disabled' `
  -Description 'This template spec creates a storage account, which is preconfigured to disable SAS authentication.' `
  -Version '1.0' `
  -TemplateFile main.bicep
New-AzTemplateSpec `
  -Name StorageWithoutSAS `
  -Location westus `
  -DisplayName 'Storage account with SAS disabled' `
  -Description 'This template spec creates a storage account, which is preconfigured to disable SAS authentication.' `
  -Version '1.0' `
  -TemplateFile azuredeploy.json

让我们来了解一下各个参数:

  • -Name 是模板规格的资源名称,不能包含空格。
  • -Location 是应在其中创建模板规格元数据的位置。 不过可以将模板规格部署到任何区域。
  • -DisplayName 是一个可读名称,可以包含空格。
  • -Description 是一个可读说明,可用于详细介绍模板规格的内容以及适用时机。
  • -Version 是模板规格的版本。在本模块的下文中你将了解版本。
  • -TemplateFile 是指向要为其创建模板规格的 ARM 模板的路径。

若要创建模板规格,请使用 az ts create 命令。 以下示例演示如何为存储帐户模板创建模板规格:

az ts create \
  --name StorageWithoutSAS \
  --location westus \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1.0 \
  --template-file main.bicep
az ts create \
  --name StorageWithoutSAS \
  --location westus \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1.0 \
  --template-file azuredeploy.json

我们来了解一下这些参数:

  • --name 是模板规格的资源名称,不能包含空格。
  • --location 是应在其中创建模板规格元数据的位置。 不过可以将模板规格部署到任何区域。
  • --display-name 是一个可读名称,可以包含空格。
  • --description 是一个可读说明,可用于详细介绍模板规格的内容以及适用时机。
  • --version 是模板规格的版本。在本模块的下文中你将了解版本。
  • --template-file 是指向要为其创建模板规格的 ARM 模板的路径。

提示

还可以在 ARM 模板中定义模板规格! 由于模板规格本身是 Azure 资源,因此可以部署一个模板,该模板定义类型为 Microsoft.Deployments/templateSpecs 的资源。