Example Parameterized Deployment With Linked Templates

This sample template will deploy multiple tiers of resources into an Azure Resource Group. Each tier has configurable elements, to show how you can expose parameterization to the end user.

Azure Public Test Date Azure Public Test Result

Azure US Gov Last Test Date Azure US Gov Last Test Result

Best Practice Check Cred Scan Check

Deploy this template to Azure

Deploy To Azure Deploy To Azure US Gov Visualize

Note: If you fork this repository, you will need to modify the link in README.md to point to your repo. If you create a separate branch for testing, you will have to include a change to this link to point to your branch as well. You must include a URL-encoded link to the raw azuredeploy.json file after /uri/ in the link defined for the deployment button. You should also change the default value of _artifactsLocation.


Front End

There are three user accessible front-ends for the deployment:

  • An Azure Bastion Service deployed into the VNET to allow ssh access to VMs that do not have public IP addresses.
  • An Azure App Gateway that will load balance HTTP requests on port 80 to the back-end tier nodes.
  • An Azure VM "Jump box" that allows ssh access, and which also has a custom startup script that uses the private ip addresses gathered from the back-end.

All 3 front-ends are protected by Network Security Groups and only allow access from an IP address or CIDR provided in the deployment parameters.

Middle Tier

The middle-tier currently serves no purpose other than to demonstrate variable configuration deployment of 0, 1, or 3 VMs as is seen in services that include a high-availability configuration when deployed.

Back End

Each node in the back-end tier currently runs a script to start a simple web server on port 80 (See examplePostInstall2.sh). The web server will display a static html file that includes the virtual machine name retrieved from the Azure Instance Metadata Service.

Topics Covered:

Naming Parameters to be User Friendly

Using Variables to Centralize Configurable Elements

Use Linked Template for Multiple Resources (IaaS)

Use Linked Template to Limit Main Template Complexity (App Gateway)

Tags: ARM, Variables, Parameters, Linked Templates, IaaS, Microsoft.Compute/proximityPlacementGroups, Microsoft.Compute/availabilitySets, Microsoft.Network/networkSecurityGroups, Microsoft.Network/networkSecurityGroups/securityRules, Microsoft.Resources/deployments, Microsoft.Network/virtualNetworks, Microsoft.Network/publicIPAddresses, Microsoft.Network/bastionHosts, Microsoft.Network/applicationGateways, Microsoft.Compute/virtualMachines, Microsoft.Compute/virtualMachines/extensions, CustomScript, Microsoft.Network/networkInterfaces