webcamp 2016: devops_Бойко Антон_azure resource manager
TRANSCRIPT
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