Well, I finally got around to signing up for a three month free trial of Microsoft’s Azure. In case you’ve been living under a rock these past few years, Azure is Microsoft’s cloud offering of virtual servers, virtual storage, web servers and associated services such as networking (between the virtual resources), Active Directory, SQL Server and something they call Mobile Services. This last one makes it easier to set up back-end services to support mobile apps for iOS devices and Windows Phones, although from reading the documentation I can’t see how this is any different from setting up a virtual server.
Whereas AWS has a bunch of pre-configured AMIs (Amazon Machine Images) that you can choose so you can get up and running more quickly than starting up a bare server and downloading and installing web servers, databases, applications, etc., I like that Azure distinguishes between Virtual Machines and Web Sites. Under Virtual Machines you can choose from a handful of Microsoft servers (SQL Server, BizTalk, Windows) or a very small collection of Linux servers (CentOS, Redhat and Ubuntu 12. Web Sites lets you choose from a collection of pre-baked application environments including the standards like Joomla, WordPress and Drupal but also some others for photo galleries, blogging and commercial web sites. AWS has an awesome array of choices, but they don’t make it easy for you to shop them. Azure has a much more limited selection, but it’s easy to browse through the list and see what’s on offer, almost like an app store. The breadth and depth of what’s on offer can only get better over time.
My first impression is that the user interface is very slick, intuitive and functional. Slightly better than AWS and way better than HP Public Cloud, which is a bit old school and dated, even though it’s the newest kid on the block. I was able to set up an Ubuntu virtual machine quite easily, even though it took me three tries. The first two times I tried uploading a .pem file to use for authentication (the same file I use to authenticate on my AWS servers), but this was rejected as not being X.509 compliant. There is nothing readily visible on the site on how to generate a compliant key-pair, so I’m left with standard username and password authentication. No worries, I’m only using this for a bit of mucking about to see how it works. But they really shouldn’t let users skip this important security step without giving them the implications and an option to do it right.
It took a lot longer for my server to be set up than on HP Public Cloud or AWS, about 5 minutes vs 2. And then, frustratingly, once it was finally created, it was in STOPPED mode so I had to figure out how to start it. I really like, however, that Azure lets you choose something meaningful for the first part of your server’s url, e.g. myserver.cloudapp.net. AWS dictates something unmemorable like ec2-46-xx-yyy-zzz.ap-northeast-1.compute.amazonaws.com. And with AWS you can get a public IP address to assign to the long url but you’ll pay an extra $0.01 per hour for the pleasure. HP Public Cloud gives you a public IP address but doesn’t charge you any extra. I think Azure gets it right here, although I’d also like to see the option of having a fixed public IP address.
When it comes to global regions, HP Public Cloud gives you three US-based options, AWS gives you the most with three in the US, plus Ireland, Brazil, Tokyo, Singapore and Sydney. Azure comes in the middle with US East, US West, Southeast Asia, East Asia, North Europe and West Europe. They don’t provide much of a clue as to where these servers are physically located. This might matter to some companies for data protection or other regulatory reasons, though companies with those types of concerns probably shouldn’t be putting their applications and data on the cloud in the first place. The thing that slightly irked me, however, was that I set up a virtual Ubuntu machine in North Europe, but when I started up a remote desktop session and surfed to whatismyipaddress.com, it showed me as Microsoft Corporation in Wichita, Kansas! This is important for companies who want to situate their services as close as possible to their users for cost and performance reasons. Maybe there’s a way to specify connection points to the public Internet but it wasn’t immediately obvious.
Lastly, and it’s just as much of a show stopper for me on Azure as it is on HP Public Cloud, there is no easy way to suspend a server and stop paying the hourly charge. Here is a direct quote from the Azure help pages: “You are billed for a virtual machine that exists in Windows Azure whether it is running or stopped. You must delete the virtual machine to stop being billed for it.” To my simple and cloud-indoctrinated mind this just doesn’t compute. Virtualization and cloud are about pay for use, like an electricity model. Pay for as much as you use. Each time you turn off all of your electrical devices and stop drawing electricity from the grid, you don’t have to tear out all the wiring. No, you just carry on and when you switch the lights back on, you start paying again. On AWS they give me some choices: STOP, which equals suspend, and means I don’t pay the server hourly charge, just some nominal, minuscule fee to store the virtual image, and which also means I can later restart the server from exactly where I left off; or TERMINATE, which stops and completely deletes the virtual server. But it seems Microsoft wants to charge you for the virtual server even though you’re not using it. Which means either they haven’t figured out all the automated provisioning, scripting, clean-ups, billing, etc.; they want to discourage this type of behaviour; or they’re hoping to gouge their users by charging them for services they may not be using.
I’ll carry on playing with Azure until my three month free trial runs out, but I won’t become a paying customer until Azure offers the ability to suspend virtual images without paying the run-time charges.