创建和发布模板规格
让我们看看如何创建和发布模板规格。
创建模板
若要创建将用作模板规格的模板,请照常编写一个 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
的资源。