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

Post on 13-Apr-2017

70 views 2 download

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