390 likes | 566 Views
Automating and Managing Windows Azure Solutions with Powershell. Tom Fuller Windows Azure – Technology Solution Professional @ DeveloperTofu http://developertofu.com . Who is Tom Fuller?.
E N D
Automating and Managing Windows Azure Solutions with Powershell Tom Fuller Windows Azure – Technology Solution Professional @DeveloperTofu http://developertofu.com
Who is Tom Fuller? I lived in Buffalo, NY until I left for college and yes, I am still a Buffalo Bills fan but no, I do not miss the snow 2 Years as MVP, 5 Years as Microsoft Field Engineer, recently took role as Azure specialist Active speaker, writer, blogger developertofu.com or @DeveloperTofu 12 years in dev focused roles like architect, web developer lots of work with large enterprises in the US In 2010, the family moves to Atlanta, GA from Tampa, FL A fun challenge, coaching a 5 and under girls team
Cloud Computing • Packaged Software • Platform • (as a Service) • Software • (as a Service) • Infrastructure • (as a Service) • You manage Applications Applications Applications Applications Data Data Data Data • You manage Runtime Runtime Runtime • Managed by vendor Runtime Middleware Middleware Middleware • You manage • Managed by vendor Middleware O/S O/S O/S Virtualization Virtualization Virtualization O/S Servers Servers Servers Virtualization • Managed by vendor Storage Storage Storage Servers Networking Networking Networking Storage Networking
Cloud Computing Patterns Inactivity Period On and Off Compute • On & off workloads (e.g. batch job) • Over provisioned capacity is wasted • Time to market can be cumbersome t Growing Fast • Successful services needs to grow/scale • Keeping up w/ growth is big IT challenge • Cannot provision hardware fast enough Compute t Unpredictable Bursting • Unexpected/unplanned peak in demand • Sudden spike impacts performance • Can’t over provision for extreme cases Compute Predictable Bursting t • Services with micro seasonality trends • Peaks due to periodic increased demand • IT complexity and wasted capacity Compute t
Windows Azure Comprehensive set of services that enable you to quickly build, deploy and manage applications across a global network of Microsoft-managed datacenters Flexible Open Solid
Virtual machines Cloud services Web sites
applicationbuildingblocks compute big data database media virtual machines identity traffic manager storage web sites infrastructure for building and running your applications service bus mobile caching CDN networking cloud services
compute data management networking Windows Azure Cloud Services (Stateless VM’s) Virtual machines in the CloudTwo Flavors: A place for your application code to run… Web role is simply a Virtual Machine with IIS pre-configured Worker role is for non-web based processing code, back-end business processes You can actually connect to your web/worker roles – they are just VM’s You package your code/artifacts and Windows Azure bootstraps a VM, installs the code and starts up the VM for you. Load balances multiple instances VMs websites cloud services connect virtual network blob SQL database noSQLdatabase traffic manager Web Role Worker Role
compute data management networking Windows Azure Virtual Machines cloud services Getting Started Select Image and VM Size New Disk Persisted in Storage VMs websites connect virtual network blob SQL database noSQLdatabase traffic manager Boot VM from New Disk Management Portal Blob Storage Scripting (Windows, Linux and Mac) REST API Cloud
compute data management networking Windows Azure Web Sites cloud services VMs Quickly and easily deploy sites to a highly scalable cloud environment with the frameworks and open source apps of your choice using Windows Azure Web Sites websites connect virtual network blob SQL database noSQLdatabase traffic manager Supported Deployment Protocols Supports multiple frameworks (ASP.NET, Classic ASP, PHP, Node.js) Pick from popular Open Source apps Pick your DB (SQL Azure, MySQL) Choose your tools (Visual Studio, Git, FTP, WebMatrix) Build on any platform (Windows, Mac, Linux) GIT : FTP 1010111001010101010001010100011 GIT : FTP 1010111001010101010001010100011 GIT : FTP Web Deploy : TFS Deploy 1010111001010101010001010100011
Service Management API for Managing and Monitoring Applications in Windows Azure Provides programmatic access to platform functionality Used to deploy, manage, and monitor applications Powerful REST API, performed over SSL and mutually authenticated using X.509certificates May be accessed from within application running in Windows Azure, or directly over the Internet from any application PowerShell commands using the same APIs can be used to script management functions
What can you do with PowerShell? Remote Management Manage SQL Databases, Configuration, Diagnostics, Deployments, and Azure assets (Affinity Groups, Storage Accounts, Keys, etc..) Automation Query, Manage and Configure Virtual Machines across multiple subscriptions, cloud services and storage accounts. Provision Fully Configured Virtual Machines Domain Joined Storage and Networking Configured Virtual Networking Completely Configure VNETs from a Script
Getting Started Use: Get-AzurePublishSettingsFile and Import-AzurePublishSettingsFile To Import Downloaded Publish Profile (.publishsettings) http://windows.azure.com/download/publishprofile.aspx Automatically configures Subscription ID, Certificate, Service Endpoint and Subscription Name. Multiple Subscription Support Get-AzureSubscription | foreach { Select-AzureSubscription $_.SubscriptionName # Perform Management Operation Against Each Subscription }
Demo Getting Started with Azure Subscription Credentials in Powershell
Virtual Machine Management Quick VM Provisioning Mode Supports VM Creation in a Single Cmdlet Advanced Provisioning Configuration Mode Provision With: Endpoints, Data Disks Configure: Cache Settings for OS/Data Disks and Subnet Names Create Multiple Pre-Defined VMs in a Batch New-AzureVM -VMs $vm1, $vm2, $vm3
Setting the current storage account Returns Storage Account Get-AzureStorageAccount | Select StorageAccountName Sets the Current Storage Account Set-AzureSubscription 'somesub1' -CurrentStorageAccount 'mystorage‘ Cmdlets like New-AzureQuickVM will use this Account
Information Needed to create a VM Image Name Get-AzureVMImage | select ImageName Disk Name Get-AzureDisk| select DiskName Data Center Location Get-AzureLocation
Simple VM Creation First 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 Service New-AzureQuickVM-Linux-ServiceName $svc -Name $vm3 -ImageName $limg-LinuxUser $lu-Password $pwd
Virtual Machine Discovery Retrieve Cloud Services Get-AzureService Retrieve Virtual Machines for Service Get-AzureVM-ServiceName $cloudSvcName Retrieve Status for All VMs in Subsription Get-AzureService | foreach { $_ | Get-AzureVM | ftServiceName, Name, InstanceStatus }
Common Settings Name The name of the Virtual Machine AvailabilitySetName The availability set (used for high availability) InstanceSize ExtraSmall, Small, Medium, Large, ExtraLarge
Provisioning Options Add-AzureProvisioningConfig Options -Windows -Password $pwd -WindowsDomain -Password $pwd -Domain $dom, -JoinDomain $fqdn, -DomainUser $domUser -DomainPassword $domPwd -MachineObjectOU $ou -DisableAutomaticUpdates -NoRDPEndpoint, -TimeZone, Certificates Add-AzureProvisioningConfig Options Linux -LinuxUser $user -Password $pwd -DisableSSH , -NoSSHEndpoint -SSHKeyPairs, -SSHPublicKeys installed from certificates deployed in cloud service
Configuring a VM at Provision Time Create Configuration Object with New-AzureVMConfig Modify with Add-* cmdlets Add with New-AzureVM New-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 -Protocoltcp | New-AzureVM-ServiceName $newSvc-Location $location
Virtual Machine Storage Data Disks Add/Remove data disks at boot or while running Create blank or attach existing disks Modify Cache Settings of OS Disk or Data Disk Modifying OS Disk while running requires reboot
Data Disk Creation New Virtual Machine Creation with Data Disk New-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 Machine Get-AzureVM-ServiceName 'myvm1' | Add-AzureDataDisk-CreateNew-DiskSizeInGB 10 -DiskLabel 'myddisk' -LUN 1 | Update-AzureVM
Deploying into a Virtual Network Virtual Machine Settings Set Subnet on VM with Set-AzureSubnet Deployment Settings Set Virtual Network -VNetName Set DNS Servers - New-AzureDns and -DNSSettings
Provision into a VNET and AD $dom = 'contoso' $jdom = 'contoso.com' $onPremDNS = New-AzureDns-IPAddress '192.168.1.4' -Name 'OnPremDNS' $cloudDNS = New-AzureDns-IPAddress '10.1.1.4' -Name 'CloudDNS' $computerOU = $advmou = 'OU=AzureVMs,DC=contoso,DC=com‘ New-AzureVMConfig-Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig-WindowsDomain-Password $pwd-Domain $dom` -DomainUserName $domUser-DomainPassword $dpwd-JoinDomain $jdom` -MachineObjectOU 'AzureVMs' | Set-AzureSubnet-SubnetNames 'AppSubnet' | New-AzureVM–ServiceName $svc-AffinityGroup 'adag' ` -VNetName 'ADVNet' -DnsSettings $onPremDNS, $cloudDNS
Demo Provisioning and updating a new Virtual Machine from Powershell
Adding and Removing Instances Update a running role to have more or less instances Set-AzureRole –ServiceName "MySvc1" –Slot "Production" –RoleName "MyTestRole3" –Count 3
VM Batch Creation Create Multiple Configured VMs and Pass to New-AzureVM $vm1 = New-AzureVMConfig-Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig-Windows-Password $pwd $vm2 = New-AzureVMConfig-Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig-Windows-Password $pwd $vm3 = New-AzureVMConfig-Name 'myvm1' -InstanceSize 'Small' -ImageName $img | Add-AzureProvisioningConfig-Windows-Password $pwd New-AzureVM-CreateService-ServiceName $cloudSvcName-VMs $vm1,$vm2,$vm3 -Location $dc
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 Custom Get-AzureVMImage | Where { $_.Category -eq 'Partner' } # Return Partner Images Get-AzureVMImage | Where { $_.OS -eq 'Windows' } # Return only Windows OS images Remove-AzureVMImage-ImageName 'myimg' -DeleteVHD# Delete image and storage Add-AzureVMImage-OS 'Windows' -ImageName 'MyWinImage' -MediaLocation 'http://storageaccount/vhds/winimage.vhd' # Add Existing VM Image from Storage • Microsoft, Partner and User Disks Get-AzureDisk# Return all Get-AzureDisk | Where { $_.AttachedTo -eq $null } # Return all not attached to a VM Get-AzureDisk | Where { $_.OS -eq $null } # Return only data disks Get-AzureDisk | Where { $_.OS -eq 'Windows' } # Return only Windows OS disks Remove-AzureDisk-DiskName 'mydisk' -DeleteVHD# Delete disk and storage Add-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 • OS Disks or Data Disks
Batch Updating Running VMs Remove RDP and Add New Storage Across all Web Front Ends Get-AzureVM-ServiceName $svc | Where { $_.Name -match 'wfe' } | foreach { $_ | Remove-AzureEndpoint-Name 'rdp' | Add-AzureDataDisk-CreateNew-DiskSizeInGB 10 -LUN 1 -DiskLabel 'newstorage' | Update-AzureVM }
Demo Automating Scale Up of a Web Role with Powershell
Get Started http://WindowsAzure.com