快速入门:创建和部署模板规格
本快速入门介绍如何将 Azure 资源管理器模板(ARM 模板)打包为模板规格。然后部署该模板规格。模板规格包含用于部署存储帐户的 ARM 模板。
先决条件
具有活动订阅的 Azure 帐户。 创建帐户。
创建模板
可以根据本地模板创建模板规格。 复制以下模板并将其本地保存到名为 azuredeploy.json 的文件中。 本快速入门假设你已将模板保存到路径 c:\Templates\azuredeploy.json,不过你可以使用任何路径。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.13.1.58284",
"templateHash": "13120038605368246703"
}
},
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Premium_LRS"
],
"metadata": {
"description": "Storage Account type"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The storage account location."
}
},
"storageAccountName": {
"type": "string",
"defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]",
"metadata": {
"description": "The name of the storage account"
}
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[parameters('storageAccountName')]"
},
"storageAccountId": {
"type": "string",
"value": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
}
}
}
创建模板规格
模板规格是名为 Microsoft.Resources/templateSpecs
的资源类型。 若要创建模板规格,可以使用 PowerShell、Azure CLI、门户或 ARM 模板。
创建新的资源组以包含模板规格。
New-AzResourceGroup `
-Name templateSpecRG `
-Location chinanorth2
在该资源组中创建模板规格。 将新的模板规格命名为 storageSpec。
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location chinanorth2 `
-TemplateFile "c:\Templates\azuredeploy.json"
创建新的资源组以包含模板规格。
az group create \
--name templateSpecRG \
--location chinanorth2
在该资源组中创建模板规格。 将新的模板规格命名为 storageSpec。
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location "chinanorth2" \
--template-file "c:\Templates\azuredeploy.json"
登录 Azure 门户。
搜索模板规格。 从可用选项中选择“模板规格”。
选择“导入模板”。
选择文件夹图标。
导航到保存的本地模板,然后将其选中。 选择“打开”。
选择“导入” 。
提供以下值:
- 名称:输入模板规范的名称。例如,storageSpec
- 订阅:选择用于创建模板规格的 Azure 订阅。
- 资源组:选择“新建”,然后输入新的资源组名称。 例如 templateSpecRG。
- 位置:选择资源组的位置。 例如“中国北部 2”。
- 版本:输入模板规格的版本。使用 1.0。
选择“查看 + 创建” 。
选择创建。
注意
建议不使用 ARM 模板,而是使用 PowerShell 或 CLI 来创建模板规格。这些工具会自动将链接的模板转换为连接到主模板的项目。 使用 ARM 模板创建模板规格时,必须手动将这些链接的模板添加为项目,这可能会很复杂。
使用 ARM 模板创建模板规格时,该模板将嵌入资源定义。 你需对本地模板进行一些更改。 复制以下模板并将其本地保存为 azuredeploy.json。
注意
在嵌入的模板中,必须使用第二个左括号对所有模板表达式进行转义。 请使用 "[[
,而不是 "[
。 JSON 数组仍使用单个左括号。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2021-05-01",
"name": "storageSpec",
"location": "chinanorth2",
"properties": {
"displayName": "Storage template spec"
},
"tags": {},
"resources": [
{
"type": "versions",
"apiVersion": "2021-05-01",
"name": "1.0",
"location": "chinanorth2",
"dependsOn": [ "storageSpec" ],
"properties": {
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Premium_LRS"
],
"metadata": {
"description": "Storage Account type"
}
},
"location": {
"type": "string",
"defaultValue": "[[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {
"storageAccountName": "[[concat('store', uniquestring(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[[variables('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "[[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[[variables('storageAccountName')]"
}
}
}
},
"tags": {}
}
]
}
],
"outputs": {}
}
使用 Azure CLI 或 PowerShell 创建新的资源组。
New-AzResourceGroup `
-Name templateSpecRG `
-Location chinanorth2
az group create \
--name templateSpecRG \
--location chinanorth2
使用 Azure CLI 或 PowerShell 部署模板。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "c:\Templates\azuredeploy.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "c:\Templates\azuredeploy.json"
部署模板规格
若要部署模板规格,请使用部署模板所用的部署命令。 传入模板规格的资源 ID 以进行部署。
创建资源组以包含新的存储帐户。
New-AzResourceGroup `
-Name storageRG `
-Location chinanorth2
获取模板规格的资源 ID。
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
部署模板规格。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
提供的参数与 ARM 模板的完全一样。 使用存储帐户类型的参数重新部署模板规格。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
创建资源组以包含新的存储帐户。
az group create \
--name storageRG \
--location chinanorth2
获取模板规格的资源 ID。
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
注意
获取模板规格 ID 并将其分配到 Windows PowerShell 中的变量时存在一个已知问题。
部署模板规格。
az deployment group create \
--resource-group storageRG \
--template-spec $id
提供的参数与 ARM 模板的完全一样。 使用存储帐户类型的参数重新部署模板规格。
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType='Standard_GRS'
选择已创建的模板规格。
选择“部署”。
提供以下值:
- 订阅:选择用于创建资源的 Azure 订阅。
- 资源组:选择“新建”,然后输入“storageRG” 。
- 存储帐户类型:选择“Standard_GRS”。
选择“查看 + 创建”。
选择“创建”。
复制以下模板并将其本地保存到名为 storage.json 的文件中。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '1.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
],
"outputs": {}
}
使用 Azure CLI 或 PowerShell 为存储帐户创建新的资源组。
New-AzResourceGroup `
-Name storageRG `
-Location chinanorth2
az group create \
--name storageRG \
--location chinanorth2
使用 Azure CLI 或 PowerShell 部署模板。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "c:\Templates\storage.json"
az deployment group create \
--resource-group storageRG \
--template-file "c:\Templates\storage.json"
授予访问权限
如果要让组织中的其他用户部署模板规格,你需要向他们授予读取权限。 对于包含要共享的模板规格的资源组,你可以将读取者角色分配给 Microsoft Entra 组。 有关详细信息,请参阅教程:使用 Azure PowerShell 授予组对 Azure 资源的访问权限。
更新模板
假设你已在模板规格中标识了要对模板进行的更改。以下模板类似于之前的模板,不同之处在于其存储帐户名称增加了前缀。 复制以下模板并更新 azuredeploy.json 文件。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Premium_LRS"
],
"metadata": {
"description": "Storage Account type"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"namePrefix": {
"type": "string",
"maxLength": 11,
"defaultValue": "store",
"metadata": {
"description": "Prefix for storage account name"
}
}
},
"variables": {
"storageAccountName": "[concat(parameters('namePrefix'), uniquestring(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('storageAccountName')]"
}
}
}
更新模板规格版本
在现有模板规格中添加名为 2.0
的新版本,而不是为修改后的模板创建新的模板规格。用户可以选择任一版本进行部署。
创建新的模板规格版本。
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location chinanorth2 `
-TemplateFile "c:\Templates\azuredeploy.json"
若要部署新版本,请获取 2.0
版本的资源 ID。
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
部署该版本。 为存储帐户名称提供一个前缀。
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-namePrefix "demoaccount"
创建新的模板规格版本。
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location "chinanorth2" \
--template-file "c:\Templates\azuredeploy.json"
若要部署新版本,请获取 2.0
版本的资源 ID。
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
部署该版本。 为存储帐户名称提供一个前缀。
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters namePrefix='demoaccount'
在模板规格中,选择“创建新版本”。
将新版本命名为 2.0
,并且可以根据需要添加说明。 选择“编辑模板”。
将模板的内容替换为更新后的模板。 选择 “查看 + 保存” 。
选择“保存更改”。
若要部署新版本,请选择“版本”
对于要部署的版本,请依次选择三个点和“部署”。
像部署早期版本时一样填写字段。
选择“查看 + 创建”。
选择“创建”。
同样,必须对本地模板进行一些更改,确保其在模板规格下正常工作。 复制以下模板并将其本地保存为 azuredeploy.json。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2021-05-01",
"name": "storageSpec",
"location": "chinanorth2",
"properties": {
"displayName": "Storage template spec"
},
"tags": {},
"resources": [
{
"type": "versions",
"apiVersion": "2021-05-01",
"name": "2.0",
"location": "chinanorth2",
"dependsOn": [ "storageSpec" ],
"properties": {
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Premium_LRS"
],
"metadata": {
"description": "Storage Account type"
}
},
"location": {
"type": "string",
"defaultValue": "[[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"namePrefix": {
"type": "string",
"maxLength": 11,
"defaultValue": "store",
"metadata": {
"description": "Prefix for storage account name"
}
}
},
"variables": {
"storageAccountName": "[[concat(parameters('namePrefix'), uniquestring(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[[variables('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "[[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[[variables('storageAccountName')]"
}
}
}
},
"tags": {}
}
]
}
],
"outputs": {}
}
若要将新版本添加到模板规格中,请使用 Azure CLI 或 PowerShell 部署模板。
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "c:\Templates\azuredeploy.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "c:\Templates\azuredeploy.json"
复制以下模板并将其本地保存到名为 storage.json 的文件中。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '2.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
],
"outputs": {}
}
使用 Azure CLI 或 PowerShell 部署模板。
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "c:\Templates\storage.json"
az deployment group create \
--resource-group storageRG \
--template-file "c:\Templates\storage.json"
清理资源
若要清理本快速入门中部署的资源,请删除创建的两个资源组。
在 Azure 门户上的左侧菜单中选择“资源组”。
在“按名称筛选”字段中输入资源组名称(templateSpecRG 和 storageRG)。
选择资源组名称。
在顶部菜单中选择“删除资源组”。
后续步骤
若要了解有关创建包含关联模板的模板规格的信息,请参阅创建关联模板的模板规格。