Download presentation
Presentation is loading. Please wait.
1
Advanced Azure Template Functions
Awesome Deployment Advanced Azure Template Functions James Bannan Principal Consultant Vibrato
2
Principal Consultant Vibrato ( From Melbourne / Australia Microsoft Azure MVP Pluralsight Author Author: Learn System Center Configuration Manager in a Month of Lunches
3
ARM template function docs
resource-manager/resource-group-template- functions
4
Function types Numeric functions (e.g. addition, subtraction)
String functions (e.g. concat, substring, toLower) Array functions (e.g. concat, length) Deployment functions (e.g. parameters, variables) Resource functions: (e.g. resourceGroup, resourceId)
5
Demo Scenario Subnets Network Security Groups User Defined Routes
Storage account Virtual network Subnets Network Security Groups User Defined Routes Linux VMs
6
Environment Requirements
Fully templated Automated build Resource isolation Utilise deployment state Minimise template size
7
Demo: Storage Deployment
8
resourceGroup() { "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}", "name": "{resourceGroupName}", "location": "{resourceGroupLocation}", "tags": { }, "properties": { "provisioningState": "{status}" } "resources": [ { "name": "[variables('storageAccountName')]", "type": "Microsoft.Storage/storageAccounts", "location": "[resourceGroup().location]", ... } ]
9
uniqueString "storageAccountName": "[concat(demo', uniqueString(resourceGroup().id))]" "storageAccountName": "[concat(demo', abcdefghijklm)]" "storageAccountName": “demoabcdefghijklm"
10
Demo: Network Deployment
11
Arrays as parameters "parameters": { "subnetProperties": {
"value": [ { "name": "subnet-dmz-a", "ipRange": " /24" }, "name": "subnet-dmz-b", "ipRange": " /24" ... ] } "parameters": { "subnetProperties": { "type": "array", }, ... } "subnets": [ { "name": "[parameters('subnetProperties')[0].Name]", "properties": { "addressPrefix": "[parameters('subnetProperties')[0].ipRange]", "networkSecurityGroup": { "id": "[reference('nsgMaster').outputs.nsgIds.value[0]]" }, "routeTable": { "id": "[reference('udrMaster').outputs.udrIds.value[0]]" } ... ]
12
reference "outputs": { "nsgID": { "type": "string",
"nsgIDs": { "type": "array", "value": [ "[reference(concat(parameters('subnetProperties')[0].Name,'-nsg')).outputs.nsgID.value]", "[reference(concat(parameters('subnetProperties')[1].Name,'-nsg')).outputs.nsgID.value]", ... ] } "outputs": { "nsgID": { "type": "string", "value": "[resourceId('Microsoft.Network/networkSecurityGroups',parameters('nsgNa me'))]" } "subnets": [ { "name": "[parameters('subnetProperties')[0].Name]", "properties": { "addressPrefix": "[parameters('subnetProperties')[0].ipRange]", "networkSecurityGroup": { "id": "[reference('nsgMaster').outputs.nsgIds.value[0]]" },
13
Demo: VM Deployment
14
Use array length to determine copy count
copyIndex “count” = 4 "resources": [ { "name": "[concat(‘website-', copyIndex())]", "type": "Microsoft.Web/sites", "copy": { "name": "websitecopy", "count": "[parameters('count')]" }, ... } ] copyIndex() 1 2 3 copyIndex(1) 1 2 3 4 Use array length to determine copy count
15
length { "name": "[parameters('vmProperties')[copyIndex()].vmName]",
"type": "Microsoft.Compute/virtualMachines", "location": “westus2", "apiVersion": " ", "copy": { "name": "vmCopy", "count": "[length(parameters('vmProperties'))]" }, "dependsOn": [ "vmNicCopy" ], ... } "parameters": { "vmProperties": { "value": [ { "vmName": “vm1", "vmSize": "Standard_F1", "vmAdminUsername": "vmAdmin", "subnetName": "subnet-app-a", "ipAddress": " ", "vmImagePublisher": "OpenLogic", "vmImageOffer": "CentOS", "vmOSVersion": "7.3" }, ... ] }
16
Mastering Microsoft Azure Resource Manager
microsoft-azure-resource-manager- mastering
17
Advanced Azure Template Functions
Awesome Deployment Advanced Azure Template Functions James Bannan Principal Consultant Vibrato
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.