Category: Azure General

My good buddy and ex co-worker Michael Collier has co-authored a very well-done book on Essentials of Azure. Michael is a great communicator and his passion for community and Azure comes out in his content.  You can download it free at It’s like finding a $100 bill in your wallet unexpectedly.  A great read for not only the beginner but those who want a deeper understanding of the constantly changing Azure platform. Great job, Michael (as always)!


On Saturday, September 6, Microsoft Azure MVP Michael McKeown, Principal Cloud Solutions Architect for Aditi Technologies ( hosted the first Azure Partner Boot Camp in Charlotte NC. Over 75 attendees spent a day meeting each other, talking Cloud, eating pizza, and listening to great Azure sessions. There were three main tracks. Understanding Azure was more for decision makers and focused on business reasons why Azure and the Cloud makes sense. It also discussed business advantages and common Cloud architectural patterns. Developing Azure was focused on developing Azure applications looking at Azure technologies like Azure Media and Mobile Services, Azure Cache, and specific examples of end-to-end Azure applications. The Administering Azure track for IT Pros rounded out the remainder of the sessions. This covered common topics like Azure Virtual Networks, Common IaaS issues, the Azure Resource Manager, Azure Storage, and the recently introduced Azure Automation.

Jeff Nuckolls, VP of Cloud Services, from Aditi kicked off the conference with the keynote speech. Jeff spoke about the Internet of Things and even demoed some sensor hardware live on stage. Then speakers from Microsoft corporate and the Southeast, Aditi Technologies, and RDA Corporation delivered the sessions for the three tracks. RDA provided five speakers at the event and was a main contributor logistically to the success of the conference. In the end there was an Xbox given away (the original winner was not present so had to redraw!), two $250 gift certs to New Egg, and multiple Xbox games and video hardware. The plan is to do this again next year but a bit later in the year so as not to have to fight the sunny 85 degree Saturday weather!

Here is the link (thanks to sponsor RDA!) to the finalized three tracks, times, sessions, and speakers for the MVP Charlotte Azure Boot Camp in at Microsoft in Charlotte, NC on Sept. 6th. Quite an impressive lineup to topics and speakers. This will be an incredible one-day of Cloud that you don’t want to miss!

*** Register now for Charlotte Azure Partner Boot Camp Sept 6 at Microsoft here!

Double-click on schedule below if you don’t want to go to the link above to expand to see speakers and sessions.


Just like my friend Jeff Nuckolls who recently spoke on the Azure Podcast, I got the opportunity to speak with Evan, Cale, and Sajeet on my favorite technical podcast, The Azure Podcast. The four of us discussed options for automating Azure from the lower-level PowerShell scripts you write yourself, the new Azure Automation and Azure Resource Manager, and the Aditi Brewmaster IaaS SaaS deployment offering (100% free to use!). You can listen on your iPhone under Azure Podcasts episode #39 or link directly here!

Take a few moments to check out this awesome installment of my favorite podcast, The Azure Podcast. This installment features our Director of Cloud Services, and my good buddy Jeff Nuckolls, sharing about the Internet of Things (IoT) and how he has positioned Aditi to handle this up and coming Cloud technology. IoT is all about the interconnection of intelligent machines transmitting massive amounts of data using various protocols into the Cloud. Once there, the data can be analyzed and converted into directives within a command-and-control relationship sending real-time commands back to the intelligent machines. In turn, these intelligent machines will modify their behavior and settings to compensate for factors identified from the data to optimize their efficiency or maximize safety. For example, a train traveling at high speeds with sensors up and down its frame can provide sensor data which in turn results in commands being sent back to modify its drag on the rails or its speed based upon incline, weather, and wind.

For a really interesting short (3-minute) very interesting video of what GE is doing in the world of intelligent machines and the IoT, check out GE Software: The Industrial Internet in the Real World..

My company Aditi did a candid part tongue-in-cheek piece on me recently. No good techie facts but if you want to know about the geek from which all this information spews take a read.

And yes… I really am BAT-MAN!!

How to Become an MVP

Shared my experiences on the Pluralsight blog on thoughts on the road to becoming a Microsoft MVP…

This is the fifth post for the mini-series entitled “Hosting SQL Server in Window Azure IaaS Fundamentals”. In this post I will discuss the option of doing a manual install of SQL Serve on a previously provisioned Azure VM running Windows Server.

So why would you want to do a manual install of SQL Server on Azure IaaS when the Gallery VMs with pre-installed versions of SQL Server exist? Well, you might want to do a manual install of SQL Server if you require a different version of SQL Server than what is available within the Windows Azure VM Gallery. Or maybe you want to install SQL Server on your own due to the licensing approach you are taking where you want to bring your own license for SQL Server into Azure. Your company policy may dictate that you pay less per month in Azure costs and more $ up front using your own license.

Let’s discuss the process of creating an Azure IaaS environment where you can install SQL Server. Since will create the VM in an identical way as we did in previous examples in this course I will just quickly review the process here on this slide since we have already gone through it a few times so far.

Provision a VM with a Windows OS from the Azure Gallery. Choose a core Windows OS VM, one that is compatible with your version of SQL Server.
a. Once you provision the VM you may want to create an affinity group if one does not already exist. You may also want to create a named storage account rather than taking the garbled system-given storage account if you do not create one explicitly.
b. Create a new Cloud service, join the affinity group
c. Create the UID/PWD as you will need to RDP into the Azure VM using those credentials to install SQL Server
d. Expose TCP Port 1433 for SQL Server to be able to manage it remotely from SQL Server Management Studio (SSMS).

Now let’s talk about the best practice of creating non-OS disks for your database and error log files to support your SQL Server installation. You would do this to improve disk performance such that the main disk that runs SQL Server should not contest with logging and data for IOPS cycles. It makes sense to create independent disks to isolate that I/O performance and improve it independently.

Note this is a process that is not limited to the manual installation of SQL Server and we are choosing to demonstrate it in the module. You can, and should, use the separate disks for data and error files regardless of how you get SQL Server up and running in the cloud.

Once the VM is provisioned you will remote desktop into the Virtual machine and manually install SQL Server. The nice feature of this manual installation option is you can install whatever version of SQL Server you want to install and are not limited by what comes in the Gallery. Here are the most common options for installing SQL Server on the Azure VM. Your options for installing greatly increase if the VM to run SQL Server in part of a virtual network and connected to your on premises severs.
• Install from internet location or VNET UNC path
• Install free SQL Server trial version
• Download from MSDN subscription
• If on VNET install from connecting to UNC path and running SQL Setup

Installing SQL Server on Azure IaaS Is just a normal installation of SQL Server with a few minor exceptions that we will discuss.

Once you get SQL Server installed you will want to enable the TCP protocol for that database server via SQL Server Configuration Manager. You also will want to configure the error and data log files to point to the non-OS disks we will attach to the VM in the upcoming demo to maximize disk performance.

A key point when optimizing disk configuration for SQL Server on an IaaS VM is you should not use D: for tempdb. The tempdb is a temporary workspace for storing temporary tables, worktables that hold intermediate results during the sorting or query processing and materialized static cursors, which correspondingly increases the performance for SQL Server. Microsoft recommend that you place tempDB on the operating system disk or the data disk instead of the temporary disk (D:) for the following reasons.
1. Performance variance: You can get the same level of performance you get on D:, if not more IOPS from the operating system or a single data disk. However, the performance of D: drive is not guaranteed to be as predictable as the operating system or data disk. This is because the size of the D: drive and the performance you get from it depends on the size of the virtual machine you use.
2. Configuration upon VM downtime situation: If the virtual machine gets shutdown down (due to planned or unplanned reasons), in order for SQL Server to recreate the tempDB under the D: drive, the service account under which SQL Server service is started needs to have local administrator privileges. In addition, the common practice with on-premises SQL deployments is to keep database and log files (including tempDB) in a separate folder, in which case the folder needs to be created before SQL Server starts. For most customers, this extra re-configuration overhead is not worth the return.
3. Performance bottleneck: If you place tempdb on D: drive and your application workloads use tempDB heavily, this can cause performance bottleneck because the D: drive can introduce constraints in terms of IOPS throughput. Instead, place tempDB on the operating system or data disks to gain more flexibility.

A summary of the steps involved in creating and configuring non-OS disks to the SQL Server installation running on Azure IaaS are as follows.
1. Attach disks in Azure portal to our existing VM that has SQL Server already manually installed
2. RDP into the Azure SQL Server VM and Initialize them
3. Configure SQL Server to use those disks using SQL Server Manager

In this post I showed you how to configure an Azure IaaS VM for a manual install of SQL Server. We talked about provision first the core Windows Base OS from the Gallery without SQL Server. We then install SQL Server and attach disks to the Azure VM to hold the SQL Server data and log files. The D: drive is transient and its size and performance vary so SQL Server should not use that for tempDB.

Note that the best practice we showed in this post of creating alternative data/log disks for the SQL Server IaaS installation is not particular to the process of installing SQL Server on an Azure IaaS VM. Most of the best practices that apply to SQL Server VM on premises apply to SQL Server in the Azure IaaS VM Cloud as well.

This is the fourth post for the mini-series entitled “Hosting SQL Server in Window Azure IaaS Fundamentals”. In this post I will teach you about uploading a VHD to Windows Azure that already has SQL Server (and possibly other supporting apps) installed on it. The reason you would want to take this approach is if you want to use SQL Server as part of an existing VM configuration you are running in your on premises virtual environment that may contain other supporting or reliant apps for SQL Server, and you want to move it as-is into Azure.    To create an Azure VM and rebuild this environment manually to replicate the on premises SQL Server configuration may be very time consuming and error prone.  With this option you will forklift the existing VM environment found on the VM into the Cloud.    This minimizes your configuration time and keeps a consistent environment from on premises to  the Cloud.  However, this process of getting SQL Server into Azure is the most complex and time consuming so it correspondingly takes longer to get SQL Server up and running in the IaaS environment. If expediency of getting SQL Server running in an Azure IaaS VM is important, or if you are not trying to replicate an on premises SQL Server installation exactly in Azure, this option is probably not for you.

We will also look at how to create and install a management certificate into Azure.  Once that is in place we can use the CSUpload utility or Azure PowerShell cmdlets to upload our VHD that contains SQL Server into Azure Blob storage.  After that is complete we can then create an Azure image or disk from that VHD. This in turn allows us to create our own custom VM installation of SQL Server running in the Azure IaaS Cloud.

Loading a VHD into Azure

By choosing this option to get SQL Server into an Azure IaaS Cloud you will not use any of the stock pre-loaded SQL Server Gallery images to create a SQL Server VM. Instead you will use a custom Azure Disk Image or Disk to create the SQL Server VM. Recall we discussed the differences between Azure disks and images in a previous post.  Be careful that when you load your VHD into Azure that it is of fixed format – not dynamic, or it may expand beyond the 127GB size during the upload process.  Also, I just want to mention again that with any SQL Server IaaS installation it is your job to manage updates to SQL Server and the VM on your own.

Install Management Cert in Azure Portal

This is a three-step process where we will first create a self-signed certificate for testing. You would probably want to get it signed by a Certificate Authority in real-world deployments.  You can then export it from the local certificate store using the Certificate Manager console.  You can then upload the certificate into Azure using CSUpload or the Azure portal.  Once the certificate is loaded you can then invoke PowerShell cmdlets or CSUpload to upload the VHD to Azure.

1. Create self-signed management certificates, open a Visual Studio command prompt as an administrator, and then run the following command. The Makecert command stores the new certificate in the default Personal certificate store. You will then need to export it from the personal store.

makecert -sky exchange -r -n “CN=mysqldemocert” -pe -a sha1 -len 2048 -ss My “mysqldemocert.cer”

2. Export your X.509 v3 certificate

  1. Start / run / certmgr.msc
  2. Navigate the tree hierarchy until you find the certificate you just created.
  3. On
    the left pane right click on the certificate and select / all tasks / export
  4. Select “No, do not export the private key”
  5. Click on next until you are asked for the Export path. Enter the desired export path.
  6. Follow the prompts and finish the export.

3. Upload the certificate to azure using the portal. Note you can also do it with the CSUpload tool if you desire to do it programmatically.

Upload a VHD from on Premises to Azure Blob Storage using CSUpload

Once the certificate is loaded to Azure, you could use its thumbprint as a parameter to the CSUpload utility and PowerShell cmdlets to upload the VHD to Azure Blob storage.  CSUpload is older technology than the Powershell cmdlet to upload the VHD but I will for sure include it since some folks don’t want to mess with Powershell.  So we will look at both in this module and you can choose which one you want to use based upon preference.  Note that if using PowerShell ISO once you import your publishsettings file you don’t need to specify a management certificate as the tool manages that for you for that session.

First let’s upload a VHD using CSUpload. Before we do any uploading we want to, as a best practice, create a named storage account for our VHDs. We will call this storage account sqluploadvms, all lowercase as required by the portal. CSUpload requires you to include the thumbprint of the management certificate you uploaded as a parameter. Here’s where you get other parameters from Azure for CSUpload.

  • Storage URL
  • Subscription ID
  • Cert Thumbprint (Column in cert page)

You can find the CSUpload tool in the C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-10\bin\ folder.  Run it from a command prompt as Administrator.

csupload Set-Connection “SubscriptionID= 04786d34-85b6-49c5-a3e3-564d625e1aa1;CertificateThumbprint= EA2D7C84D99127E5294B5A5151B7C7D886462DC3;ServiceManagementEndpoint=”

csupload Add-PersistentVMImage -Destination “” -Label Win2008R2.vhd -LiteralPath C:\Temp\Win2008R2.vhd -OS Windows

Upload a VHD to Azure Blob Storage Using PowerShell

The other option, and as a best practice is typically the preferred option since you don’t have to mess with creating an uploading a mgmt certitficate using PowerShell ISO, it to use PowerShell to upload the VHD.  PowerShell API offers more options as well over CSUpload.  We don’t need to explicitly upload a  management certificate for certain tools like Visual Studio or PowerShell ISE. When you access the publishsettings file from either of them it will create a mgmt certificate for that connection and install in the Azure portal.  Note that if you are running a PS1 PowerShell scripts from the normal Powershell comand prompt you need to reference the thumbprint of the certificate within the scripts itself.

Next let’s upload a VHD using PowerShell. Open a Windows Azure PowerShell ISE window. As a best practice when you are interactively using PowerShell this is better than using the normal Azure PowerShell prompt due to the ability to help you develop the call interactively. When you download the publishsettings file it contains information and a certificate for your Windows Azure subscription.  This means you do not need to use the certificate thumbprint explicitly in these calls. Import the file set the current subscription and storage account, then being the upload of the VHD to blob storage.

//Causes you to log into azure portal. Download to c:\temp and rename //for simplicity file.publishsettings.


If we now look at the at the Azure portal we can see there is a new certificate that has been uploaded and created for the PowerShell ISO tool.   We will now import the publishing settings file which contains an encoded version of the management certificate we just created. It serves as your credentials to administer your subscriptions and related services. Store this file in a secure location or delete it after you use it.  When we import the publishsettings file that cert will be used for all powershell calls using this connection.

//Imports the file and chooses a default subscription. If not what you //need to change it in next command.

Import-AzurePublishSettingsFile c:\temp\file.publishsettings

//Choose current subscription and storage account to copy the VHD to.

Select-AzureSubscription “Windows Azure MSDN – Visual Studio Professional”

//Begin the upload

Add-AzureVhd -Destination “” -LocalFilePath “C:\temp\Win2008R2.vhd”.

Once we get the VHD uploaded to Azure we need to the create an Azure Disk or Image from that VHD. What we will create depends upon if the OS on that disk has run sysprep for an image or not for a disk.

Once you get the VHD that contains SQL Server uploaded to blob storage you can then create a SQL Server image from a VHD, or you can create a SQL Server disk from a VHD in one of these two ways:

Creating an Azure SQL Server Image

  1. Virtual Machines/Images/Create
  2. Find a VHD that has been syspred and create a SQL Server image

Creating an Azure SQL Server Disk

  1. Virtual Machines/Disks/Create
  2. Find a VHD that has been NOT BEEN syspred and create a SQL Server image
  3. Click The VHD contains an operating system of it does and this disk you will run the SQL Server from. If just a SQL Server data disk (no OS) don’t check this.

Once we create an Azure Image or Disk, we can them create a VM from this in the gallery.


This post is one of the most involved so far. We discussed how to create, export, and upload a self-signed certificate to Azure if you are uploading a VHD using CSUpload or a PS1 file in which you would need to specify the cert thumbprint in the PS1 file. Once that is complete you upload your VHD to blob storage using powershell cmdlets or the CSUpload utility.  From there you create an Azure image or disk from the VHD (again depending upon if it has been sysprep’d or not) then create an Azure VM or Disk from that VHD.   You can then start your VM and your custom installation of SQL Server is up and running in Azure IaaS.

This Saturday, Nov 9, I’m speaking at Code Camp in Raleigh, NC on Azure HA/DR.