Windows Azure - Transferring .NET Web Application to Azure

You hit on several points: training, porting, scaling, and virtual machine management.

Training

You should probably look at some of the intro videos at MSDev. The "Windows Azure Fall 2010" series are the latest ones. Note that, to run an app in Azure, you need to understand the Azure Fabric and related services such as diagnostics and role management.

Porting

You'll need to look at what you're doing beyond core asp.net, such as caching, session state management, security, 3rd-party DLLs, COM, registry access, and any other admin-level functions. Today, with SDK 1.2, you won't have the ability to manipulate the registry or run an MSI. I have a related StackOverflow post about some of the areas where you might run into challenges. Regarding SQL Azure: Some features, such as CLR support, are not implemented, and you won't have access to some system-level features. Details about differences can be found in a whitepaper on the SQL Azure site.

With the new features introduced at PDC 2010, you should be able to overcome nearly all of these issues:

  • Session state may be hosted in AppFabric Cache. This will simply be a configuration change to your config. This cache will be available across all of your deployed web instances, allowing you to scale.
  • Admin-level access is available with Admin mode. You'll be able to run MSI's and modify things like the registry when your role instances boot up.

Scaling

You'll need to look closely at how your app handles scaling. For example: you might have a bottleneck if all server instances attempt to work simultaneously with the same resource, causing locks. A common Azure pattern is to place work items in a durable Azure Queue and have background worker role instances consume these work items asynchronously.

Today, Azure doesn't provide an out-of-the-box session state management ability (e.g. storing state in SQL Server). However, there's a downloadable sample on the SQL Azure Blog that works great with SQL Azure. As mentioned above, the new AppFabric Cache feature will provide session state management, so you will soon have an out-of-the-box solution.

Virtual Machine Management

VM Role was announced at PDC. In essence, this will provide you the ability to take a Windows Server 2008 R2 image, built locally, and move it to Azure. You'll need to install Azure extensions that allow the image to be managed by the Azure fabric.

There is a tradeoff though: Your VM won't benefit from OS upgrades and patches: You'll be responsible for managing these (via differencing disk). The Azure fabric will still monitor your VM's health, and reboot it or move it if necessary. I would recommend first attempting to utilize Admin Mode, so you can still take advantage of 100% of Azure's services.


From a developers point of view, there isn't much work associated with moving an existing ASP.net app into Azure. You may come across a few issues such as session state and caching, however both of these can be resolved by configuration alone. SQLAzure will provide most of the functionality that you get from standard SQL Server, and you can use the SQLAzure Migration Wizard to move you database into the cloud.

At PDC10 they announced a new VM role, so I presume this is what you are referring to. So yes if you have an existing setup running on a Windows Server 2008 R2, you can virtualise this and move it into a VM role.

Also at PDC10 it was announced that WebRoles will now run full IIS7, so you can get down and dirty with IIS if you want, without having to go down the route of a VM role.