创建和发布模板规格

已完成

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

创建模板

若要创建模板以用作模板规格,可以像平时一样编写 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 门户部署模板规格时,门户会:

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

此屏幕截图展示了参数值的输入:

显示用于输入模板规格部署的参数值的 Azure 门户界面的屏幕截图。

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

将模板规格发布到 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资源。