WebCamp 2016: DevOps_Бойко Антон_Azure Resource Manager

Post on 13-Apr-2017

76 views 2 download

Transcript of WebCamp 2016: DevOps_Бойко Антон_Azure Resource Manager

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