Tutorial: Deploy a template spec as a linked template
Learn how to deploy an existing template spec by using a linked deployment. You use template specs to share ARM templates with other users in your organization. After you have created a template spec, you can deploy the template spec by using Azure PowerShell or Azure CLI. You can also deploy the template spec as a part of your solution by using a linked template.
Prerequisites
An Azure account with an active subscription. Create a trial subscription.
Note
To use template spec with Azure PowerShell, you must install version 5.0.0 or later. To use it with Azure CLI, use version 2.14.2 or later.
Create a template spec
Follow Quickstart: Create and deploy template spec to create a template spec for deploying a storage account. You need the resource group name of the template spec, template spec name, and template spec version in the next section.
Create the main template
To deploy a template spec in an ARM template, add a deployments resource to your main template. In the templateLink
property, specify the resource ID of a template spec. Create a template with the following JSON called azuredeploy.json. This tutorial assumes you've saved to a path c:\Templates\deployTS\azuredeploy.json but you can use any path.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"tsResourceGroup":{
"type": "string",
"metadata": {
"Description": "Specifies the resource group name of the template spec."
}
},
"tsName": {
"type": "string",
"metadata": {
"Description": "Specifies the name of the template spec."
}
},
"tsVersion": {
"type": "string",
"defaultValue": "1.0.0.0",
"metadata": {
"Description": "Specifies the version the template spec."
}
},
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"metadata": {
"Description": "Specifies the storage account type required by the template spec."
}
}
},
"variables": {
"appServicePlanName": "[concat('plan', uniquestring(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2016-09-01",
"name": "[variables('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "B1",
"tier": "Basic",
"size": "B1",
"family": "B",
"capacity": 1
},
"kind": "linux",
"properties": {
"perSiteScaling": false,
"reserved": true,
"targetWorkerCount": 0,
"targetWorkerSizeId": 0
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "createStorage",
"properties": {
"mode": "Incremental",
"templateLink": {
"id": "[resourceId(parameters('tsResourceGroup'), 'Microsoft.Resources/templateSpecs/versions', parameters('tsName'), parameters('tsVersion'))]"
},
"parameters": {
"storageAccountType": {
"value": "[parameters('storageAccountType')]"
}
}
}
}
],
"outputs": {
"templateSpecId": {
"type": "string",
"value": "[resourceId(parameters('tsResourceGroup'), 'Microsoft.Resources/templateSpecs/versions', parameters('tsName'), parameters('tsVersion'))]"
}
}
}
The template spec ID is generated by using the resourceID()
function. The resource group argument in the resourceID() function is optional if the templateSpec is in the same resource group of the current deployment. You can also directly pass in resource ID as a parameter. To get the ID, use:
$id = (Get-AzTemplateSpec -ResourceGroupName $resourceGroupName -Name $templateSpecName -Version $templateSpecVersion).Versions.Id
The syntax for passing parameters to the template spec is:
"parameters": {
"storageAccountType": {
"value": "[parameters('storageAccountType')]"
}
}
Note
The apiVersion of Microsoft.Resources/deployments
must be 2020-06-01 or later.
Deploy the template
When you deploy the linked template, it deploys both the web application and the storage account. The deployment is same as deploying other ARM templates.
New-AzResourceGroup `
-Name webRG `
-Location chinanorth2
New-AzResourceGroupDeployment `
-ResourceGroupName webRG `
-TemplateFile "c:\Templates\deployTS\azuredeploy.json" `
-tsResourceGroup templateSpecRg `
-tsName storageSpec `
-tsVersion 1.0
Next steps
To learn about creating a template spec that includes linked templates, see Create a template spec of a linked template.