One of the concerns with moving more infrastructure services into a public cloud is cost. It’s all very well that the costs are low, and that the CapEx has switched to OpEx but it’s also good to be able to budget. Subscription-based charging models can make that difficult at times.
Over the last couple of weeks, I’ve been brushing up my knowledge of both Amazon’s and Microsoft‘s infrastructure as a service (IaaS) offerings and I found something that’s quite alarming. Not only is the Windows Azure IaaS offering less fully-featured than Amazon EC2 but, from a cursory glance, it could potentially cost a lot more because of the way that Microsoft charges for compute service provision.
Whereas Amazon only charging for the hours when a virtual machine is “powered on”, Microsoft charges for the fact that the virtual machine has been provisioned, regardless of whether it’s actually doing anything. This sounded odd, so I asked a question of one of the evangelists at Microsoft UK, who used a rental car analogy to explain that when I have a virtual machine deployed in Azure I’ve still taken resources that can’t be allocated to someone else until I “undeploy” it (think of booking and returning the hire car). On the other hand though, Amazon only charges for the time I use the virtual machine (although I will of course have to pay for the storage that it is actually using), so the analogy is more one of a pool of shared cars.
I tried to confirm this with Amazon Web Services (@awscloud) and Microsoft Windows Azure (@windowsazure) but have not received a response at the time of writing; however Dave Hood alerted me to a clause in the Windows Azure pricing details:
“Compute hours are charged whenever the Virtual Machine is deployed, irrespective of whether it is running or not.”
That could work out quite expensive for those who have spare virtual machines deployed, ready to fire up at a moment’s notice, but not normally in operation (e.g. in a disaster recovery failover scenario).
[Update 12:22]: Microsoft’s Windows Azure team have responded via Twitter to confirm that VMs are charged, even when not running:
Amazon charges until you terminate a VM. You are charged even when it’s not running. Here is an excerpt from their pricing page: “Pricing is per instance-hour consumed for each instance, from the time an instance is launched until it is terminated. “. That’s functionally equivalent to Azure, isn’t it?
Craig, as I understand it, Amazon charges for storage but not compute, when a VM is powered down but still deployed on EC2. Microsoft charges storage and compute until you “undeploy” the VM from Azure. The difference appears to be that I can build an infrastructure on EC2, deploy the VMs, and leave it there until I’m ready, powered down (or with just a couple of critical VMs running), then fire it up at will if I need it (e.g. in a DR scenario). With Azure I would be charged for all of those VMs, even when dormant.