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.
Deploy this template to Azure
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
.
Overview
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