Azure deployment models
Service model (aka classic)
ApplicationInsight
Sql Database
Mobile App
Storage Web App
Resource model
ResourceGroup
ApplicationInsight
Sql Database
Mobile App
Storage Web App
Resource group
• Group of tightly coupled resources that share a life cycle
• Container for multiple resources
• Resources exist in one resource group
• Resource groups can span regions
• Resource groups can span services
Power of repeatability
ARM templates can
• Ensure idempotency
• Simplify orchestration
• Provide cross-resource configuration and update support
• Integrate in CI/CD pipeline
ARM templates are
• Source file, checked-in
• Specifies resources and dependencies (VMs, Web Apps, DBs) and connections (config, LB sets)
• Input/output with parameters
ARM templates
• Parameters• user input for the template
• Variables• Data to be reused in the template• No user input• Ex: subnet IP range, resources names with prefixes
• Resources• Models all the resources in the resource group
• Outputs• information to be send from the execution• Ex: DNS name for the created blog
ARM template parameters
"parameters": {
"EnvironmentName": {
"type": "string",
"minLength": 1,
"maxLength": 10
},
"WebFarmSKU": {
"type": "string",
"allowedValues": [ "Standard", "Premium" ],
"defaultValue": "Standard"
},
"WebFarmWorkersCount": {
"type": "int",
"allowedValues": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
"defaultValue": 1
}
}
ARM template variables
"variables": {
"WebFarmName": "[concat('WebFarm-‘,
parameters('EnvironmentName'),
'-',
uniqueString(resourceGroup().id))]",
"SqlServerName": "[toLower(concat('SqlServer-',
parameters('EnvironmentName'),
'-',
uniqueString(resourceGroup().id)))]",
"CdnProfileName": "[concat('Cdn-',
parameters('EnvironmentName'),
'-',
uniqueString(resourceGroup().id))]",
"StorageName": "[toLower(concat(parameters('EnvironmentName'),
uniqueString(resourceGroup().id)))]"
}
ARM template resources
"resources": [{
"name": "[variables('WebFarmName')]",
"type": "Microsoft.Web/serverfarms",
"location": "[resourceGroup().location]",
"apiVersion": "2014-06-01",
"dependsOn": [],
"tags": {},
"properties": {
"name": "[variables('WebFarmName')]",
"sku": "[parameters('WebFarmSKU')]",
"workerSize": "[parameters('WebFarmWorkersSize')]",
"numberOfWorkers": "[parameters('WebFarmWorkersCount')]"
}
}]
ARM template and parameters
Template"parameters": {
…
},
"variables": {
…
},
"resources": [
…
],
"outputs": {
…
}
Parameters"parameters": {
"EnvironmentName": {
"value": "demo"
},
"SqlServerAdminLogin": {
"value": "master"
},
"SqlServerAdminPassword": {
"value": "Qwerty12!"
}
}
ARM template execution
Start
App Plan
SqlServer
Web App
Sql DB
Conn. String
Alert Rule
Storage Acc.
Backup policy
End
Moving to ARM
• ARM template can be extracted from any existing resource group via export deployment functionality (currently in preview)
• Resource explorer can be used to find out current resource configuration https://resources.azure.com/
• Quick start templates on GitHub https://github.com/Azure/azure-quickstart-templates
• Ukrainian Azure Community templates on GitHub https://github.com/AzureUA/ARM-Templates
Role based access control
Writing ARMtemplates
Any JSON editor
Visual Studio
Deploying ARM templates
Visual Studio
Azure PowerShell
PS C:\Users\v-anboyk>
New-AzureRmResourceGroupDeployment
-TemplateFile <path-to-template>
-TemplateParameterFile <path-to-params>
-ResourceGroupName <group-name>
-Name <deployment-name>
Azure xPlat CLI
C:\Users\v-anboyk>
azure group deployment create
--template-file <path-to-template>
--parameters-file <path-to-params>
--resource-group <group-name>
--name <deployment-name>
Azure portal
Demo
Top Related