28
Automating Azure VMs with PowerShell Feschenko Alexander Senior Software Engineer @ EPAM Systems Blog: feschenkoalex.blogspot.com Email: [email protected] Microsoft Azure

Automating Azure VMs with PowerShell

Embed Size (px)

Citation preview

Page 1: Automating Azure VMs with PowerShell

Automating Azure VMs with PowerShellFeschenko AlexanderSenior Software Engineer @ EPAM SystemsBlog: feschenkoalex.blogspot.comEmail: [email protected]

Microsoft Azure

Page 2: Automating Azure VMs with PowerShell

Agenda Intro to Windows Azure PowerShellAutomating Azure virtual machines.

Base cmdlets descriptionDemo Session. Create and configure

virtual machine. Provision and configure frontend and backend parts

Migrating applications to the Cloud with Azure IaaS

Page 3: Automating Azure VMs with PowerShell

Getting startedDownload and Install Windows Azure PowerShell http://go.microsoft.com/?linkid=9811175

Download Web Deploy 3.5http://www.iis.net/downloads/microsoft/web-deploy

Add-AzureAccount

Page 4: Automating Azure VMs with PowerShell

What can you do with PowerShell?

AutomationQuery, Manage and Configure Virtual Machines across multiple subscriptions, cloud services and storage accounts.

Virtual NetworkingCompletely Configure VNETs from a Script

Provision Fully Configured Virtual MachinesDomain JoinedStorage and Networking Configured

Remote ManagementManage SQL Databases, Configuration, Diagnostics, Deployments, and Azure assets (Affinity Groups, Storage Accounts, Keys, etc..)

Page 5: Automating Azure VMs with PowerShell

New Disk Persisted in

Storage

Cloud

Provisioning VMProvision From

GalleryGetting Started

Management Portal

>_Scripting

(Windows, Linux and Mac)

REST API

Boot VM from New DiskWindows Server

Linux

General PurposeBasicStandard

Optimized ComputePerformance OptimizedNetwork Optimized

Page 6: Automating Azure VMs with PowerShell

7

VM GalleryA COLLECTION OF PREBUILT IMAGES FOR VARIOUS WORKLOADS

Microsoft Azure

Windows Server 2012 R2

Ubuntu Server 14.04 LTS

CentOS 6.5SUSE Linux

Enterprise Server Oracle Linux 6.4.0.0.0

SQL Server 2014 Standard

Oracle Database 11g R2

BizTalk Server 2013 SharePoint Server Farm

Microsoft Dynamics GP 2013 Zulu 8

SAP HANA Developer Edition Puppet Enterprise

3.2.3Barracuda Web

Application

Oracle WebLogicServer 12.1.2

Visual Studio Ultimate 2013

openSUSE 13.1

Page 7: Automating Azure VMs with PowerShell

8

VM Extensions• Installable components to customize VM instances• Enable various DevOps scenarios• Can be added, updated, disabled or removed at any time• Managed via portal, PowerShell and Management APIs

Microsoft Azure

Page 8: Automating Azure VMs with PowerShell

Virtual Machine Management

Quick VM ProvisioningSupports VM Creation in a Single Cmdlet

Create Multiple Pre-Defined VMs in a BatchNew-AzureVM -VMs $vm1, $vm2, $vm3

Advanced Provisioning ConfigurationProvision With: Endpoints, Data DisksConfigure: Cache Settings for OS/Data Disks and Subnet Names

Page 9: Automating Azure VMs with PowerShell

Setting the current storage account

Returns Storage AccountGet-AzureStorageAccount | Select StorageAccountName

Cmdlets like New-AzureQuickVM will use this Account

Sets the Current Storage Account

Page 10: Automating Azure VMs with PowerShell

Virtual Machine DiscoveryRetrieve Cloud Services Get-AzureService

Retrieve Virtual Machines for Service Get-AzureVM -ServiceName $cloudSvcName

Retrieve Status for All VMs in SubsriptionGet-AzureService | foreach { $_ | Get-AzureVM | ft ServiceName, Name, InstanceStatus}

Page 11: Automating Azure VMs with PowerShell

Simple VM creationFirst Virtual Machine in a NEW Cloud Service (-Location specified)New-AzureQuickVM -Windows -ServiceName $svc -Name $vm1 -ImageName $wimg -Location $location -Password $pwd

New Virtual Machine in an Existing Cloud Service(no -Location)New-AzureQuickVM -Windows -ServiceName $svc -Name $vm2 -ImageName $wimg -Password $pwd

Creating a Linux Virtual Machine in an Existing Cloud ServiceNew-AzureQuickVM -Linux -ServiceName $svc -Name $vm3 -ImageName $limg -LinuxUser $lu -Password $pwd

Page 12: Automating Azure VMs with PowerShell

Setting VM configurationNew-AzureVMConfig -Name $vm1 -InstanceSize Medium -ImageName $img | Add-AzureProvisioningConfig -Windows -Password $pwd | Add-AzureDataDisk -CreateNew -DiskLabel 'data' -DiskSizeInGB 10 -LUN 0 | Add-AzureEndpoint -Name 'web' -PublicPort 80 -LocalPort 80 -Protocol tcp | New-AzureVM -ServiceName $newSvc -Location $location

Page 13: Automating Azure VMs with PowerShell

Disks and ImagesOS Images• Microsoft• Partner • User

Disks• OS Disks • Data Disks

Base OS image for new Virtual MachinesSys-Prepped/Generalized/Read Only Created by uploading or by capture

Writable Disks for Virtual MachinesCreated during VM creation or during upload of existing VHDs.

Page 14: Automating Azure VMs with PowerShell

Image MobilityOn-Premises Cloud

MyApp.vhd

Page 15: Automating Azure VMs with PowerShell

Data disk creationNew Virtual Machine Creation with Data DiskNew-AzureVMConfig -Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig -Windows -Password $pwd | Add-AzureDataDisk -CreateNew -DiskSizeInGB 10 -DiskLabel 'myddisk' -LUN 0 | New-AzureVM -ServiceName $cloudSvcName

Add new Data Disk to existing Virtual MachineGet-AzureVM -ServiceName 'myvm1' | Add-AzureDataDisk -CreateNew -DiskSizeInGB 10 -DiskLabel 'myddisk' -LUN 1 | Update-AzureVM

Page 16: Automating Azure VMs with PowerShell

Disk and image repository

OS Images

Get-AzureVMImage # Return all Get-AzureVMImage | Where { $_.Category -eq 'Microsoft' } # Return Microsoft Get-AzureVMImage | Where { $_.Category -eq 'User' } # Return CustomGet-AzureVMImage | Where { $_.Category -eq 'Partner' } # Return Partner ImagesGet-AzureVMImage | Where { $_.OS -eq 'Windows' } # Return only Windows OS imagesRemove-AzureVMImage -ImageName 'myimg' -DeleteVHD # Delete image and storageAdd-AzureVMImage -OS 'Windows' -ImageName 'MyWinImage' -MediaLocation 'http://storageaccount/vhds/winimage.vhd' # Add Existing VM Image from Storage

Disks

Get-AzureDisk # Return all Get-AzureDisk | Where { $_.AttachedTo -eq $null } # Return all not attached to a VMGet-AzureDisk | Where { $_.OS -eq $null } # Return only data disks Get-AzureDisk | Where { $_.OS -eq 'Windows' } # Return only Windows OS disksRemove-AzureDisk -DiskName 'mydisk' -DeleteVHD # Delete disk and storageAdd-AzureDisk -OS 'Windows' -DiskName 'MyWinDisk' -MediaLocation 'http://storageaccount/vhds/winosdisk.vhd‘ # Add Existing OS Disk from Storage Add-AzureDisk -DiskName 'MyDataDisk' -MediaLocation 'http://storageaccount/vhds/datadisk.vhd‘# Add Existing Data Disk from Storage

Microsoft, Partner and User

OS Disks or Data Disks

Page 17: Automating Azure VMs with PowerShell

Customer Manager Architecture

IISVM1

IISVM2

SQL Server Load Balancer

PowerShell script. Performsautomated deployment and VM configuringService Management API

End Users

CustomerManager DBdeployed

CustomerManager web app deployed

CustomerManager web app deployed

Page 18: Automating Azure VMs with PowerShell

Automating Customer Manager App

Provision 2 frontend servers and 1 backend

Remote PowerShell to VMs and configure its parameters: web server, firewall rules, app pools, etc.

Compile and build CustomerManager. Deploy the package to frontend servers. Point frontend to SQL VM

Run CustomerManager and observe results

Page 19: Automating Azure VMs with PowerShell

Demo: Provisioning VMManaging VMs using PowerShell

Page 20: Automating Azure VMs with PowerShell

Migrating apps to the Cloud

Page 21: Automating Azure VMs with PowerShell

Migration ApproachesBuild Virtual Machine in the Cloud

Migrating an existing virtual machine

Lowers upload time and dependency risk

Application, configuration and data in an installed working state

Requires upload and installation of application and data

Requires uploading a large amount of data and higher risk of drivers or other hardware dependencies on VM not available in the cloud

Page 22: Automating Azure VMs with PowerShell

Migrating a Multi-VM applicationCloud Service Acts as a Network Boundary

All VMs in the same service can communicate directly.Name resolution between VMs is automatic with Windows Azure provided DNS

VM Name: iisvm110.1.5.6

VM Name: iisvm210.1.5.7

VM Name: sqlvm110.1.5.8

DIP

DIP DIP

Cloud ServiceName: bootcamp2015kh.cloudapp.net

Load BalancerPublic IP

Page 23: Automating Azure VMs with PowerShell

Virtual Machine Configuration

Windows Azure supports VHD file format

Upload existing VHDs using CSUpload.exeOther formats will have to be converted or migrated before upload

Supports resuming failed transfersConverting from dynamic to fixed disk on UploadEfficient upload – does not send empty bytes

Things to do before uploading OS diskEnable Remote Access

Page 24: Automating Azure VMs with PowerShell

Migrating a simple virtual machineOn Premises VMMachine Name: APPSRV1Memory: 8GbCores: 4Ports: 80/443 http/https

Guest: C:\Host: C:\VMs\APP-OS.vhd

Guest: D:\Host: D:\VMs\APP-Data.vhd

Guest: E:\Host: E:\VMs\APP-Logs.vhd

Cloud ServiceName: myapp.cloudapp.net

Virtual MachineRole Name: appsrv14 cores7 Gb RAMPorts 80/443

Guest: C:\Host: C:\VMs\APP-OS.vhd

Guest: E:\Host: E:\VMs\APP-Data.vhd

Guest: F:\Host: F:\VMs\APP-Logs.vhd

Migration Steps1) Upload VHDsCSUpload or other tools

2) Create VMOS disk = APP-OS.vhd

3) Configure data disks Data Disk 1 = App-Data.vhdData Disk 2 = App-Logs.vhd

4) Adjust app for drive letters

Windows Azure Storage

5) Add Endpoints (80/443)

Page 25: Automating Azure VMs with PowerShell

Imaging VMs in the CloudCloud

Blob Storage

Base VHD

Boot VM

Customize VHD

Generalize VHD

Capture VM

Capture VM saves customized image to your image library

Page 26: Automating Azure VMs with PowerShell

Azure Virtual Networks A protected private virtual network in cloud Extend enterprise networks into Azure Cross-premises connectivity

Page 27: Automating Azure VMs with PowerShell

29

Virtual Network Scenarios• Hybrid Public/Private Cloud

Enterprise app in Microsoft Azure requiring connectivity to on-premise resources

• Enterprise Identity and Access ControlManage identity and access control with on-premise resources (on-premises Active Directory)

• Monitoring and ManagementRemote monitoring and trouble-shooting of resources running in Azure

• Advanced Connectivity RequirementsCloud deployments requiring IP addresses and direct connectivity across services

Microsoft Azure

Page 28: Automating Azure VMs with PowerShell

Questions