{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "",
"apiProfile": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
|
Element name
|
Required
|
Description
|
|
$schema
|
Yes
|
- Location of the JavaScript Object Notation (JSON) schema file that describes the version of the template language.
- The version number depends on the scope of the deployment and the JSON editor. |
|
contentVersion
|
Yes
|
Version of the template (such as 1.0.0.0). Can be any value. Used to document significant changes in the template. This value can be used to make sure that the right template is being used.
|
|
apiProfile
|
No
|
An API version that serves as a collection of API versions for resource types. Use this value to avoid having to specify API versions for each resource in the template.
|
|
parameters
|
No
|
Values that are provided when deployment is executed to customize resource deployment.
|
|
variables
|
No
|
Values that are used as JSON fragments in the template to simplify template language expressions.
|
|
functions
|
No
|
User-defined functions that are available within the template.
|
|
resources
|
Yes
|
Resource types that are deployed or updated in a resource group or subscription.
|
|
outputs
|
No
|
Values that are returned after deployment.
|
"parameters": {
"<parameter-name>" : {
"type" : "<type-of-parameter-value>",
"defaultValue": "<default-value-of-parameter>",
"allowedValues": [ "<array-of-allowed-values>" ],
"minValue": <minimum-value-for-int>,
"maxValue": <maximum-value-for-int>,
"minLength": <minimum-length-for-string-or-array>,
"maxLength": <maximum-length-for-string-or-array-parameters>,
"metadata": {
"description": "<description-of-the parameter>"
}
}
}
|
Element name
|
Required
|
Description
|
|
parameter-name
|
Yes
|
Name of the parameter. Must be a valid JavaScript identifier.
|
|
type
|
Yes
|
Type of the parameter value. The allowed types and values are string, securestring, int, bool, object, secureObject, and array.
|
|
defaultValue
|
No
|
Default value for the parameter, if no value is provided for the parameter.
|
|
allowedValues
|
No
|
Array of allowed values for the parameter to make sure that the right value is provided.
|
|
minValue
|
No
|
The minimum value for int type parameters, this value is inclusive.
|
|
maxValue
|
No
|
The maximum value for int type parameters, this value is inclusive.
|
|
minLength
|
No
|
The minimum length for string, secure string, and array type parameters, this value is inclusive.
|
|
maxLength
|
No
|
The maximum length for string, secure string, and array type parameters, this value is inclusive.
|
|
description
|
No
|
Description of the parameter that is displayed to users through the portal. For more information
|
"parameters": {
"storageSKU": {
"type": "string",
"allowedValues": [
"Standard_LRS",
"Standard_ZRS",
"Standard_GRS",
"Standard_RAGRS",
"Premium_LRS"
],
"defaultValue": "Standard_LRS",
"metadata": {
"description": "The type of replication to use for the storage account."
}
}
}
"resources": [
{
"condition": "<true-to-deploy-this-resource>",
"type": "<resource-provider-namespace/resource-type-name>",
"apiVersion": "<api-version-of-resource>",
"name": "<name-of-the-resource>",
"comments": "<your-reference-notes>",
"location": "<location-of-resource>",
"dependsOn": [
"<array-of-related-resource-names>"
],
"tags": {
"<tag-name1>": "<tag-value1>",
"<tag-name2>": "<tag-value2>"
},
"sku": {
"name": "<sku-name>",
"tier": "<sku-tier>",
"size": "<sku-size>",
"family": "<sku-family>",
"capacity": <sku-capacity>
},
"kind": "<type-of-resource>",
"copy": {
"name": "<name-of-copy-loop>",
"count": <number-of-iterations>,
"mode": "<serial-or-parallel>",
"batchSize": <number-to-deploy-serially>
},
"plan": {
"name": "<plan-name>",
"promotionCode": "<plan-promotion-code>",
"publisher": "<plan-publisher>",
"product": "<plan-product>",
"version": "<plan-version>"
},
"properties": {
"<settings-for-the-resource>",
"copy": [
{
"name": ,
"count": ,
"input": {}
}
]
},
"resources": [
"<array-of-child-resources>"
]
}
]
|
Element name
|
Required
|
Description
|
|
condition
|
No
|
Boolean value that indicates whether the resource will be provisioned during this deployment. When true, the resource is created during deployment. When false, the resource is skipped for this deployment.
|
|
type
|
Yes
|
Type of the resource. This value is a combination of the namespace of the resource provider and the resource type (such as Microsoft.Storage/storageAccounts).
|
|
apiVersion
|
Yes
|
Version of the REST API to use for creating the resource. When creating a new template, set this value to the latest version of the resource you're deploying.
|
|
name
|
Yes
|
Name of the resource. The name must follow URI component restrictions defined in RFC3986.
|
|
comments
|
No
|
Your notes for documenting the resources in your template.
|
|
location
|
Varies
|
Supported geo-locations of the provided resource. You can select any of the available locations, but typically it makes sense to pick one that is close to your users.
|
|
dependsOn
|
No
|
Resources that must be deployed before this resource is deployed. Resource Manager evaluates the dependencies between resources and deploys them in the correct order.
|
|
tags
|
No
|
Tags that are associated with the resource. Apply tags to logically organize resources across your subscription.
|
|
sku
|
No
|
Some resources allow values that define the SKU to deploy. For example, you can specify the type of redundancy for a storage account.
|
|
kind
|
No
|
Some resources allow a value that defines the type of resource you deploy.
|
|
copy
|
No
|
If more than one instance is needed, the number of resources to create. The default mode is parallel. Specify serial mode when you don't want all or the resources to deploy at the same time.
|
|
plan
|
No
|
Some resources allow values that define the plan to deploy. For example, you can specify the marketplace image for a virtual machine.
|
|
properties
|
No
|
Resource-specific configuration settings. The values for the properties are the same as the values you provide in the request body for the REST API operation (PUT method) to create the resource. You can also specify a copy array to create several instances of a property.
|
|
resources
|
No
|
Child resources that depend on the resource being defined. Only provide resource types that are permitted by the schema of the parent resource. Dependency on the parent resource isn't implied. You must explicitly define that dependency.
|
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2018-10-01",
"name": "[variables('vmName')]", // to customize name, change it in variables
"location": "[parameters('location')]", //defaults to resource group location
"dependsOn": [ /* storage account and network interface must be deployed first */
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"comments": "This template was developed for demonstration purposes.",
"author": "Example Name"
},
**For parameters, add a metadata object with a description property.**
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Virtual Machine."
}
},
**The following example shows both a comments element and a metadata object for Resources**
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2018-07-01",
"name": "[concat('storage', uniqueString(resourceGroup().id))]",
"comments": "Storage account used to store VM disks",
"location": "[parameters('location')]",
"metadata": {
"comments": "These tags are needed for policy compliance."
},
"tags": {
"Dept": "[parameters('deptName')]",
"Environment": "[parameters('environment')]"
},
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
}
]
**For outputs, add a metadata object to the output value.**
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]",
"metadata": {
"comments": "Return the fully qualified domain name"
}
},
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"stringParameter": {
"type": "string",
"defaultValue": "option 1"
},
"intParameter": {
"type": "int",
"defaultValue": 1
},
"boolParameter": {
"type": "bool",
"defaultValue": true
},
"objectParameter": {
"type": "object",
"defaultValue": {
"one": "a",
"two": "b"
}
},
"arrayParameter": {
"type": "array",
"defaultValue": [ 1, 2, 3 ]
}
},
"resources": [],
"outputs": {}
}
"variables": {
"<variable-name>": "<variable-value>",
"<variable-name>": {
<variable-complex-type-value>
},
"<variable-object-name>": {
"copy": [
{
"name": "<name-of-array-property>",
"count": <number-of-iterations>,
"input": <object-or-value-to-repeat>
}
]
},
"copy": [
{
"name": "<variable-array-name>",
"count": <number-of-iterations>,
"input": <object-or-value-to-repeat>
}
]
}
"variables": { "storageName": "[concat(toLower(parameters('storageNamePrefix')), uniqueString(resourceGroup().id))]"},"resources": [ { "type": "Microsoft.Storage/storageAccounts", "name": "[variables('storageName')]", ... }]"functions": [
{
"namespace": "<namespace-for-functions>",
"members": {
"<function-name>": {
"parameters": [
{
"name": "<parameter-name>",
"type": "<type-of-parameter-value>"
}
],
"output": {
"type": "<type-of-output-value>",
"value": "<function-return-value>"
}
}
}
}
],
|
Element name
|
Required
|
Description
|
|
namespace
|
Yes
|
Namespace for the custom functions. Use to avoid naming conflicts with template functions.
|
|
function-name
|
Yes
|
Name of the custom function. When calling the function, combine the function name with the namespace. For example, to call a function named
uniqueName in the namespace contoso, use "[contoso.uniqueName()]". |
|
parameter-name
|
No
|
Name of the parameter to be used within the custom function.
|
|
parameter-value
|
No
|
Type of the parameter value. The allowed types and values are string, securestring, int, bool, object, secureObject, and array.
|
|
output-type
|
Yes
|
Type of the output value. Output values support the same types as function input parameters.
|
|
output-value
|
Yes
|
Template language expression that is evaluated and returned from the function.
|
"outputs": {
"<output-name>": {
"condition": "<boolean-value-whether-to-output-value>",
"type": "<type-of-output-value>",
"value": "<output-value-expression>",
"copy": {
"count": <number-of-iterations>,
"input": <values-for-the-variable>
}
}
}
|
Element name
|
Required
|
Description
|
|
output-name
|
Yes
|
Name of the output value. Must be a valid JavaScript identifier.
|
|
condition
|
No
|
Boolean value that indicates whether this output value is returned.
When true, the value is included in the output for the deployment. When false, the output value is skipped for this deployment. When not specified, the default value is true. |
|
type
|
Yes
|
Type of the output value. Output values support the same types as template input parameters. If you specify securestring for the output type, the value isn't displayed in the deployment history and can't be retrieved from another template. To use a secret value in more than one template, store the secret in a Key Vault and reference the secret in the parameter file.
|
|
value
|
No
|
Template language expression that is evaluated and returned as output value. Specify either value or copy.
|
|
copy
|
No
|
Used to return more than one value for an output. Specify value or copy.
|
**Define output values**
The example shows how to return the resource ID for a public IP address:
"outputs": {
"resourceID": {
"type": "string",
"value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
}
}
**Get output values**
**PowerShell**
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
**Azure CLI**
az deployment group show \
-g <resource-group-name> \
-n <deployment-name> \
--query properties.outputs.resourceID.value
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2018-10-01",
"name": "[variables('vmName')]", // to customize name, change it in variables
"location": "[
parameters('location')
]", //defaults to resource group location
/*
storage account and network interface
must be deployed first
*/
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
No comments yet.
Cheatography n. The art of mapping complex subjects into clear, instantly navigable reference guides.