{"id":698,"date":"2018-11-12T01:44:20","date_gmt":"2018-11-12T01:44:20","guid":{"rendered":"http:\/\/www.ciraltos.com\/?p=698"},"modified":"2023-03-23T23:45:06","modified_gmt":"2023-03-24T04:45:06","slug":"arm-template-basics","status":"publish","type":"post","link":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/","title":{"rendered":"ARM Template Basics"},"content":{"rendered":"<p><a href=\"\/wp-content\/uploads\/2018\/11\/AzureARM.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft wp-image-673 size-thumbnail\" src=\"\/wp-content\/uploads\/2018\/11\/AzureARM-150x150.png\" alt=\"\" width=\"150\" height=\"150\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/AzureARM-150x150.png 150w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/AzureARM-300x300.png 300w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/AzureARM.png 512w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/a>In my last <a href=\"http:\/\/www.ciraltos.com\/json-and-arm-templates\/\">post<\/a>, I went over JSON as it pertains to Azure ARM Templates.\u00a0 In this post, I\u2019m going to dig deeper into the parts that make up an ARM Template.\u00a0 I will use a simple VNet deployment as an example.\u00a0 The goal is to define each part of the ARM Template and how the pieces fit together to make a deployment.<\/p>\n<p>The full example file I use in this post can be found <a href=\"https:\/\/github.com\/tsrob50\/vNetSample\" target=\"_blank\" rel=\"noopener\">here<\/a>.<!--more--><\/p>\n<p>ARM templates have five sections.\u00a0 They include:<\/p>\n<p>Parameters<br \/>\nVariables<br \/>\nFunctions<br \/>\nResources<br \/>\nOutput<\/p>\n<h2>Functions<\/h2>\n<p>I will start with functions as they are referenced in the sections that follow.\u00a0 There are two types of functions in ARM Templates, template functions, and user functions.\u00a0 Below I focus on template functions that are pre-defined and evaluated at the time of the deployment.\u00a0 The examples below don\u2019t use user functions and I leave that out for brevity.<\/p>\n<p>Template functions work by calling the function name followed by parameter in single parentheses. Enclosed the parameter in single quotes. Single quotes are not allowed in a JSON file as mentioned in my previous post.\u00a0 However, at run time the function is evaluated and replaced by the literal value referenced in the parameter or variable section.\u00a0 The dnsServer example starts with calling the function \u201cparameters\u201d and passing the function parameter \u201cdnsServers\u201d.<\/p>\n<p>parameters(\u2018dnsServers\u2019)<\/p>\n<p>The function is enclosed in brackets to identifie it as a function.<\/p>\n<p>[parameters(\u2018dnsServers\u2019)]<\/p>\n<p>Lastly, the function is enclosed in double quotes, making it a JSON string literal (otherwise it would be interpreted as an array).<\/p>\n<p>\u201c[parameters(\u2018dnsServers\u2019)]\u201d<\/p>\n<p>At run time, the above function \u201c[parameters(\u2018dnsServers\u2019)]\u201d is interpreted and replaced with \u201c10.115.115.10\u201d<\/p>\n<h2>Parameters<\/h2>\n<p>The Parameters section contains user configurable variables.\u00a0 Parameters can be modified at the time of deployment with the use of a parameter file.\u00a0 Also, if deployed through the portal the user will get text boxes requesting input for the deployment.<\/p>\n<p>Take a look at the \u201cdnsServers\u201d parameter below.\u00a0 This is an object belonging to parameters.\u00a0 The properties of this object are represented by another series of key-value pair objects.\u00a0 One of them, \u201callowedValues\u201d value is an array, as indicated by the [] brackets.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/11\/11_4Image1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-705 size-full\" src=\"\/wp-content\/uploads\/2018\/11\/11_4Image1.png\" alt=\"\" width=\"962\" height=\"353\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image1.png 962w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image1-300x110.png 300w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image1-768x282.png 768w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image1-960x353.png 960w\" sizes=\"(max-width: 962px) 100vw, 962px\" \/><\/a><\/p>\n<p>The schema of dnsServers looks like the image below.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/11\/11_4Image2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-706 size-large\" src=\"\/wp-content\/uploads\/2018\/11\/11_4Image2-1024x340.png\" alt=\"\" width=\"640\" height=\"213\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image2-1024x340.png 1024w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image2-300x100.png 300w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image2-768x255.png 768w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image2.png 1212w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Parameters are not required in an ARM deployment.\u00a0 Parameters aid the readability and the reusability of a template.\u00a0 With some modifications to the parameter section, this template could be deployed in many different environments.<\/p>\n<p>The only required parameter values include:<\/p>\n<p>paramterName \u2013 Name of the parameter.<br \/>\ntype \u2013 The JSON value allowed for the parameter.\u00a0 The values include string, int, bool, securitstring, object, secureObject, and array.<\/p>\n<p>Parameters can have many properties.\u00a0 The optional parameters used in the example above and in this template include:<\/p>\n<p>defaultValue \u2013 Sets a default value that can be overridden at the time of deployment.<br \/>\nallowedValues \u2013 Array object with a list of values that can be used. The deployment will not run if the override value does not match an allowed value.<br \/>\nmetadata &gt; description \u2013 metadata contains the object description.\u00a0 This is the parameter description visible on a portal deployment.<\/p>\n<p>Once established, parameters can be called using the parameters function.\u00a0 This is a template function used to return the literal value of a parameter.\u00a0 For the example of dnsServers, the parameter is referenced like shown below.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/11\/11_4Image3.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-707\" src=\"\/wp-content\/uploads\/2018\/11\/11_4Image3.png\" alt=\"\" width=\"456\" height=\"201\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image3.png 456w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image3-300x132.png 300w\" sizes=\"(max-width: 456px) 100vw, 456px\" \/><\/a><\/p>\n<h2>Variables<\/h2>\n<p>Variables are, well, variables.\u00a0 Like parameters, they are not required for a deployment.\u00a0 The difference between variables and parameters is that parameters are exposed and can be modified during deployment.\u00a0 Variables are embedded in the template and can only be modified in the template, prior to run time.<\/p>\n<p>Say you are a consultant and you reuse templates for different clients.\u00a0 There could be a \u201cClient prefix\u201d added as a variable that appends a prefix to resource names.\u00a0 This would change only once per client and not during deployment.<\/p>\n<p>In their simplest form, variables are a key-value pair with the key used to reference the value in a template function.\u00a0 Call the variable template function similarly to the parameters function.\u00a0 The expression\u00a0\u201c[variables(\u2018location\u2019)]\u201d is evaluated to the location of the deployments resource group.<\/p>\n<pre>\u201c[variables(\u2018location\u2019)]\u201d<\/pre>\n<p><a href=\"\/wp-content\/uploads\/2018\/11\/11_4Image6.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-702\" src=\"\/wp-content\/uploads\/2018\/11\/11_4Image6.png\" alt=\"\" width=\"461\" height=\"100\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image6.png 461w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image6-300x65.png 300w\" sizes=\"(max-width: 461px) 100vw, 461px\" \/><\/a><\/p>\n<p>You may have noticed the \u201cresourceGroup().location\u201d expression in the above example.\u00a0 This is a resource function that references the location property of the resource group used during deployment.\u00a0\u00a0 More information on the many different template functions that can be used to simplify templates can be found <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-resource-manager\/resource-group-template-functions\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>ARM Templates deploy resources in parallel.\u00a0 This is good for speed, but sometimes resources depend on other resources.\u00a0 The dependsOn statement forces an order to resource deployment. In another example of the value of variables,\u00a0 I have a dependsOn statement that references a complex expression below. \u00a0You can see it has a long concatenate statement for a network security group.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/11\/11_4Image4-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-710\" src=\"\/wp-content\/uploads\/2018\/11\/11_4Image4-1.png\" alt=\"\" width=\"1018\" height=\"479\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image4-1.png 1018w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image4-1-300x141.png 300w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image4-1-768x361.png 768w\" sizes=\"(max-width: 1018px) 100vw, 1018px\" \/><\/a><\/p>\n<p>Below is the same template, replacing the complex \u201cdependsOn\u201d expression with a variable.\u00a0 This may seem trivial in a small deployment, but can significantly increase readability and decrease complexity in large deployments.\u00a0 Also, notice that variables can reference parameters, adding to their flexibility of use.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/11\/11_4Image5-1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-709\" src=\"\/wp-content\/uploads\/2018\/11\/11_4Image5-1.png\" alt=\"\" width=\"1000\" height=\"483\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image5-1.png 1000w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image5-1-300x145.png 300w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image5-1-768x371.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><\/p>\n<blockquote><p>Parameters vs. Variables<br \/>\nBest practices is to use variables whenever possible and to limit parameters to items that need to be defined at the time of deployment.\u00a0 It is not uncommon to set up the template so all parameters are referenced by a variable, and only variables are used in the resource section of the template.<\/p><\/blockquote>\n<h2><\/h2>\n<h2>Resources<\/h2>\n<p>The resources section defines what Azure resources will be deployed and is a mandatory section of a template.\u00a0 The \u201cresources\u201d template key has an array value, indicated by the brackets[] that encloses the section.<\/p>\n<p>The Resources array contains a list of complex JSON objects.\u00a0 The first object, shown below, represents the Virtual Network.\u00a0 Within that object are other objects and arrays used to define required and optional settings for the deployment.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/11\/11_4Image7.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-703\" src=\"\/wp-content\/uploads\/2018\/11\/11_4Image7.png\" alt=\"\" width=\"758\" height=\"957\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image7.png 758w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image7-238x300.png 238w\" sizes=\"(max-width: 758px) 100vw, 758px\" \/><\/a><\/p>\n<p>A Microsoft website with details on resources is located <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/templates\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.\u00a0 This template was created based on Microsoft&#8217;s example located under Reference, Network, Virtual Network.\u00a0 Every resource will have several required key-value settings as defined below.<\/p>\n<p>apiVersion \u2013 API version used for the deployment<br \/>\nType \u2013 Azure resource being deployed<br \/>\nName \u2013 name of the resource<br \/>\nProperties \u2013 list of optional and mandatory settings to create the resource<\/p>\n<p>Other settings are optional. \u00a0For example, I did not have to add Address Spaces, DHCP servers or Subnets.\u00a0 Those are required for my environment however and it wouldn&#8217;t be complete without them.\u00a0 I left out user-defined routing and VNet peering, but I could have added that if needed for my environment. Notice the use of parameters and variables in the resource section.\u00a0 This adds to the readability and reusability of the template.<\/p>\n<p>Always start with clear plan for the deployment prior to creating the template.\u00a0 When creating a VM for example, first outline requirements such as VM, network adapter and storage account.\u00a0 Then identify the properties of each.\u00a0 For the VM, there will be the VM size, OS type, number of data disks.\u00a0 The network adapter will need the IP allocation, static or dynamic.\u00a0 What will the name of the storage account be and they type, LRS, GRS?\u00a0 Each one of these resources is a member of the resource section \u201carray\u201d.\u00a0 The properties defined in each resource.<\/p>\n<p>The assortment of resources and properties of each can be overwhelming.\u00a0 This is where understanding the structure of JSON can help.\u00a0 The resource section is an array, each section underneath is just a key-value pair that defines the resource.<\/p>\n<blockquote><p>A note on API versions.\u00a0 Some sample templates use an expression to reference the latest version instead of an explicit date like this example.\u00a0 I advise against dynamic API versions.\u00a0 It is possible that schema changes with an updated API will break templates.<\/p><\/blockquote>\n<h2><\/h2>\n<h2>Output<\/h2>\n<p>The Output section returns information at the end of the deployment.\u00a0 This can be informational or used by applications if the deployment was submitted programmatically.\u00a0 One example could be a deployment with a public IP.\u00a0 The IP is unknown until it&#8217;s assigned during the deployment.\u00a0 The Output section could return the IP information.<\/p>\n<p>Options for outputs are the name, they type and the value.\u00a0 In the example to follow, I output the variable ns1Id and the VNet name<\/p>\n<p>Retrieve outputs with the Get-AzureRmResourceGroupDeployment command.\u00a0 The deployment below was run with the command:<\/p>\n<pre>New-AzureRmResourceGroupDeployment -Name TestDeploy -ResourceGroupName TestVNet -TemplateFile .\\Template2.json<\/pre>\n<p>Retrieve deployment details with the following command:<\/p>\n<pre>Get-AzureRmResourceGroupDeployment -Name TestDeploy -ResourceGroupName TestVNet<\/pre>\n<p>Although formatting is shifted to display on the screen,\u00a0 the output is correct.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/11\/11_4Image8.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-704\" src=\"\/wp-content\/uploads\/2018\/11\/11_4Image8.png\" alt=\"\" width=\"1490\" height=\"507\" srcset=\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image8.png 1490w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image8-300x102.png 300w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image8-768x261.png 768w, https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2018\/11\/11_4Image8-1024x348.png 1024w\" sizes=\"(max-width: 1490px) 100vw, 1490px\" \/><\/a><\/p>\n<h2>Validation<\/h2>\n<p>Test a template with the Test-AzureRmResourceGroupDeployment command prior to running the deployment.\u00a0 This command requires a Resource Group and a reference to the template file.\u00a0 There is no need for a deployment name.<\/p>\n<pre>Test-AzureRmResourceGroupDeployment -ResourceGroupName TestVNet -TemplateFile .\\Template2.json<\/pre>\n<p>The command will run and return an error if it finds one.\u00a0 Otherwise, no output indicates there was no issue.<\/p>\n<p>Congratulations on making it to the end!\u00a0 I just scratched the surface on resources in an ARM template.\u00a0 Stay tuned for a deeper dive into the resource section.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my last post, I went over JSON as it pertains to Azure ARM Templates.\u00a0 In this post, I\u2019m going to dig deeper into the parts that make up an ARM Template.\u00a0 I will use a simple VNet deployment as an example.\u00a0 The goal is to define each part of the ARM Template and how &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/\"> <span class=\"screen-reader-text\">ARM Template Basics<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":""},"categories":[2],"tags":[175,303,256,9,12,183,174,302],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ARM Template Basics - ciraltos<\/title>\n<meta name=\"description\" content=\"In this post, I\u2019m going to dig deeper into the parts that make up an ARM Template.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ARM Template Basics - ciraltos\" \/>\n<meta property=\"og:description\" content=\"In this post, I\u2019m going to dig deeper into the parts that make up an ARM Template.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/\" \/>\n<meta property=\"og:site_name\" content=\"ciraltos\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-12T01:44:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-24T04:45:06+00:00\" \/>\n<meta name=\"author\" content=\"Travis Roberts\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ciraltos\" \/>\n<meta name=\"twitter:site\" content=\"@ciraltos\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Travis Roberts\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/\"},\"author\":{\"name\":\"Travis Roberts\",\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/25391996d6cddfecd4d257162b7e373a\"},\"headline\":\"ARM Template Basics\",\"datePublished\":\"2018-11-12T01:44:20+00:00\",\"dateModified\":\"2023-03-24T04:45:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/\"},\"wordCount\":1472,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/25391996d6cddfecd4d257162b7e373a\"},\"keywords\":[\"ARM\",\"arm template\",\"Automation Runbook\",\"Azure\",\"cloud\",\"Dynamic Azure ARM Template\",\"template\",\"test-azurermresourceaccountdeployment\"],\"articleSection\":[\"Azure\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/\",\"url\":\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/\",\"name\":\"ARM Template Basics - ciraltos\",\"isPartOf\":{\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/#website\"},\"datePublished\":\"2018-11-12T01:44:20+00:00\",\"dateModified\":\"2023-03-24T04:45:06+00:00\",\"description\":\"In this post, I\u2019m going to dig deeper into the parts that make up an ARM Template.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.ciraltos.com\/staging2\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ARM Template Basics\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/#website\",\"url\":\"https:\/\/www.ciraltos.com\/staging2\/\",\"name\":\"ciraltos\",\"description\":\"cloud, technology and trends\",\"publisher\":{\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/25391996d6cddfecd4d257162b7e373a\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.ciraltos.com\/staging2\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/25391996d6cddfecd4d257162b7e373a\",\"name\":\"Travis Roberts\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2023\/03\/Logo-1.png\",\"contentUrl\":\"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2023\/03\/Logo-1.png\",\"width\":5657,\"height\":3563,\"caption\":\"Travis Roberts\"},\"logo\":{\"@id\":\"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/image\/\"},\"sameAs\":[\"http:\/\/www.ciraltos.com\",\"https:\/\/twitter.com\/ciraltos\"],\"url\":\"https:\/\/www.ciraltos.com\/staging2\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ARM Template Basics - ciraltos","description":"In this post, I\u2019m going to dig deeper into the parts that make up an ARM Template.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/","og_locale":"en_US","og_type":"article","og_title":"ARM Template Basics - ciraltos","og_description":"In this post, I\u2019m going to dig deeper into the parts that make up an ARM Template.","og_url":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/","og_site_name":"ciraltos","article_published_time":"2018-11-12T01:44:20+00:00","article_modified_time":"2023-03-24T04:45:06+00:00","author":"Travis Roberts","twitter_card":"summary_large_image","twitter_creator":"@ciraltos","twitter_site":"@ciraltos","twitter_misc":{"Written by":"Travis Roberts","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/#article","isPartOf":{"@id":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/"},"author":{"name":"Travis Roberts","@id":"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/25391996d6cddfecd4d257162b7e373a"},"headline":"ARM Template Basics","datePublished":"2018-11-12T01:44:20+00:00","dateModified":"2023-03-24T04:45:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/"},"wordCount":1472,"commentCount":0,"publisher":{"@id":"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/25391996d6cddfecd4d257162b7e373a"},"keywords":["ARM","arm template","Automation Runbook","Azure","cloud","Dynamic Azure ARM Template","template","test-azurermresourceaccountdeployment"],"articleSection":["Azure"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/","url":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/","name":"ARM Template Basics - ciraltos","isPartOf":{"@id":"https:\/\/www.ciraltos.com\/staging2\/#website"},"datePublished":"2018-11-12T01:44:20+00:00","dateModified":"2023-03-24T04:45:06+00:00","description":"In this post, I\u2019m going to dig deeper into the parts that make up an ARM Template.","breadcrumb":{"@id":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.ciraltos.com\/staging2\/arm-template-basics\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.ciraltos.com\/staging2\/"},{"@type":"ListItem","position":2,"name":"ARM Template Basics"}]},{"@type":"WebSite","@id":"https:\/\/www.ciraltos.com\/staging2\/#website","url":"https:\/\/www.ciraltos.com\/staging2\/","name":"ciraltos","description":"cloud, technology and trends","publisher":{"@id":"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/25391996d6cddfecd4d257162b7e373a"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.ciraltos.com\/staging2\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/25391996d6cddfecd4d257162b7e373a","name":"Travis Roberts","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/image\/","url":"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2023\/03\/Logo-1.png","contentUrl":"https:\/\/www.ciraltos.com\/staging2\/wp-content\/uploads\/2023\/03\/Logo-1.png","width":5657,"height":3563,"caption":"Travis Roberts"},"logo":{"@id":"https:\/\/www.ciraltos.com\/staging2\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/www.ciraltos.com","https:\/\/twitter.com\/ciraltos"],"url":"https:\/\/www.ciraltos.com\/staging2\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/posts\/698"}],"collection":[{"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/comments?post=698"}],"version-history":[{"count":32,"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/posts\/698\/revisions"}],"predecessor-version":[{"id":743,"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/posts\/698\/revisions\/743"}],"wp:attachment":[{"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/media?parent=698"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/categories?post=698"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ciraltos.com\/staging2\/wp-json\/wp\/v2\/tags?post=698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}