创建和发布模板规格
让我们看看如何创建和发布模板规格。
创建模板
若要创建模板以用作模板规格,可以像平时一样编写 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": []
}
在此示例中,模板参数使用allowedValues
和maxValue
description
属性来明确参数的用途以及设置其值的效果。 该模板还包括用于指示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 进行部署,而是发布模板规格。
重要
将 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
资源。