When migrating Microsoft-based applications to public cloud, the right choice of cloud provider is not as simple as “technology X, therefore cloud Y”. Some teams make an assumption that because an application uses Windows, .NET or SQL Server then Microsoft Azure is the “best” choice. The aim of this blog is to challenge that assumption so people can make a more informed choice of cloud provider.
So how do we answer the big question: “which is the best cloud to run Windows and Microsoft-based applications?” None of AWS, Azure or Google Cloud are a bad choice. But to make the best choice for you, we need to think about all aspects of the migration. This goes beyond technical requirements, for example:
- Which cloud provider(s) are your organisation already using? Does your organisation already have strategic partnerships?
- What additional skillsets are needed, either through training or recruitment? How easy is it to recruit for those?
- What is the organisation’s long-term cloud strategy? Are there plans that will require particular capabilities?
- How will the application evolve and what other applications will be migrated? Will we build on the initial cloud experience rather than introduce a multi-cloud strategy (in which case the decision is often bigger than the single application or the current technology choices)?
Next we’ll look at several aspects of Azure and AWS that need to be considered: Experience and Maturity, Reliability, Range of Services and Features, Developer eXperience (DX) and Operations, Microsoft Licensing Options, and last but not least Modernisation Opportunities.
Experience and Maturity
AWS have been running Microsoft workloads for over eleven years. AWS runs more Microsoft than any other provider – almost twice as much as the nearest competitor which is, of course, Microsoft Azure! IDC (a leading IT Analyst) estimates that AWS accounted for approximately 57.7% of total Windows instances in public cloud IaaS during 2017.
Being the market leader in cloud and having such a mature offering can also make it easier to find and recruit developers, operations and architects who are experienced in AWS versus Azure or Google Cloud.
Andy Jassy, CEO of AWS, once famously addressed the question “Are Microsoft catching you up?” with the answer “There is no compression algorithm for experience. You can’t learn certain lessons without going through the curve.”
However, there are some things you can compress: Microsoft have done a great job releasing excellent services on Azure, learning from AWS. The developer experience is also really good on Azure, learning from the many popular DevOps tools and practices.
But operations, scalability and reliability are hard problems for a cloud provider. AWS have learnt a lot since 2006 running hyper-scale public cloud services reliably. As Andy Jassy said recently at the EMEA Summit, AWS has grown up as part of Amazon which is a high-volume low-margin business – other providers don’t think that way.
The Most Reliable Cloud
The term “Region” means different things for different cloud providers. An AWS region consists of multiple Availability Zones owned and operated by AWS (except for China). These are several miles apart to meet disaster recovery requirements, and each Availability Zone (AZ) is itself a group of datacenters. Compare this with a region in Azure, which can be one datacenter or co-location space in a third-party datacenter. Azure are striving to improve with multi-AZ regions, but even Azure “recommended regions” might be a single datacenter – “designed to support Availability Zones now, or in the future”.
Azure have had recent capacity issues in some regions, and in the last few months have had to prioritise customers related to Covid-19 work. Azure have also had more outages (almost seven times more downtime hours than AWS in 2018). There’s a great article by Corey Quinn about Azure’s recent capacity woes, describing how it risks damaging the overall perception of public cloud. It’s worth judging each hyperscale cloud provider separately, evaluating it for your use-case and choosing the provider that works best for you.
Range of Services and Features
AWS are releasing Microsoft-focused features and services at an impressive rate. For example, when Microsoft released SQL Server 2019 then AWS released support for this on EC2 in the same week (of course Azure supported SQL Server 2019 at the same time as the release). The graph below, from AWS, illustrates their rate of innovation:
Source: AWS, “Windows on AWS” presentation
This allows Dev and Ops teams (and DevSecOps teams) to develop, deploy and modernise faster, more reliably and more securely – using the services that are right for them. For example, using RDS SQL Server (the fully managed AWS service) makes high availability, backups, DR, monitoring and performance easier to manage than SQL Server on your own VMs – decreasing the total cost of ownership (TCO).
Many of the AWS Services not specific to Windows can be used with Microsoft-based applications – for example databases, machine learning, AI, analytics, IoT, etc. There are 175 fully featured services on AWS (estimated to be 48 more than Azure when looking at comparable options). In 2019, there were over 1900 features and services released by AWS (90% of these driven directly by customers) vs 1000+ new capabilities in the past year for Azure.
Azure and Google Cloud are also releasing features and services at an impressive rate, but in many areas are still playing catch-up. For example, AWS offers 210 security, compliance, and governance services and key features which is about 40 more than Azure. Another example is Spot instances (which can save up to 90% on your VM compute costs) – introduced by AWS in 2009, but only just in preview for Azure since December 2019.
Developer eXperience (DX) and Operations
Developers want to focus on applications and business logic, delivering functionality to customers rapidly – they don’t want to change their tooling unnecessarily or have to think about undifferentiated heavy lifting.
Microsoft have a very strong history of enterprise sales and definitely understand the enterprise. Over the past few years they’ve shown they also understand the developer and DevOps communities, as do Google Cloud and AWS.
Each of AWS, Azure and Google Cloud make developing and deploying your code to the cloud straight forward. You can also mix-and-match with 3rd party CI/CD tools. For example, AWS lets you use VSTS and Azure DevOps for continuous integration and continuous delivery.
You can choose from a range of compute options, which include: Windows VMs; Lambda functions running .NET Core and PowerShell (supported by AWS since Sep’2018, and Azure since Nov’2019); and containers running .NET core in a fully managed Kubernetes (or ECS).
Operations is also made simpler with services like AWS Systems Manager for patching and automations, services for centralised logging, monitoring, alerting, etc.
Microsoft Licensing Options
You can potentially save on your SQL Server licensing costs by taking advantage of cheaper SQL Server architecture and licensing options on AWS. This is because AWS Availability Zones in each region are connected via networks that give sub-two-millisecond latency which is fast enough for synchronous data replication. See this TSO Logic analysis for more details.
Microsoft changed their licensing terms for licenses purchased after 1st October 2019, so be careful! Microsoft’s Azure Hybrid Benefit allows on-prem licenses to be used in Azure, which can save a lot of money for some Azure customers (at least in the short term).
You can use your existing Microsoft software and licenses on AWS (but without as big a cost benefit as Azure Hybrid), plus you can use additional licence-included instances without having to modify your agreement with Microsoft. The bring-your-own-license (BYOL) options include using shared-tenancy VMs if you have License Mobility with Software Assurance, or alternatively using dedicated tenancy where the servers host instances dedicated to one customer. In contrast, the license-included on-demand instances are excellent for only paying for what you need (e.g. scaling back out-of-hours).
The AWS License Manager can also help in managing software licenses to ensure compliance – a tricky problem in a very dynamic environment, and where teams may be able to deploy and manage their own applications.
Application modernisation is an important enabler for realising the benefits of cloud – faster innovation, lower costs, improved reliability and security.
This might start with automating manual processes and moving to managed services (instead of running things yourself on VMs, such as databases, FTP services, email, etc).
You might modernise your application to escape license restrictions for Windows and/or SQL Server: moving to .NET Core on Linux, or high-performance relational databases such as Aurora, no-sql databases such as DynamoDB and/or the S3 object store.
AWS have some generous programmes to help with migrating and modernising Microsoft-based applications on AWS – for more details speak to an advanced consulting partner who specialises in this area, such as Cloudsoft.
It’s surprisingly hard to predict Cloud costs on one cloud provider, let alone compare costs of different cloud providers. Your bills depend on day-to-day usage patterns and will change as your application architecture evolves. This is the benefit and the pain of on-demand cost models! None of the major cloud providers make this easy or predictable.
Comparing the on-demand pricing of various common services, prices are broadly similar across the big three cloud providers – which is cheaper will depend on your usage and instance types (Azure comes out slightly cheaper more often when looking at compute costs for different sizes of VM).
A big cost is the Windows and SQL Server licensing costs. Here Azure can be a lot cheaper with their Azure Hybrid Benefit mentioned earlier – i.e. if you are already paying Microsoft a lot of license money then you can more easily reuse those licenses in Azure (see earlier section on Microsoft Licensing Options).
In fact, Microsoft claim that AWS is five times as expensive for Windows Server. That comparison makes some big assumptions so you are unlikely to see those numbers for your use-case. It assumes you continue to pay Microsoft out of a different budget for licenses, including Software Assurance (the license terms let you re-use these on Azure, but in some circumstances not use them for AWS shared-tenancy VMs). It also includes Extended Security Updates, which apply to old versions such as Windows 2008. This comparison is worthy of a future blog post of its own.
To me, that cost comparison is actually an advert for modernisation: upgrade to a newer version of Windows and save almost 40%, or even better move to .NET on Linux and save 80% of your costs – you no longer have to buy those Windows Licenses, which probably came from some other part of your company’s budget not shown in Microsoft’s comparison
Conclusions and Next Steps
None of AWS, Azure or Google Cloud are a bad choice. It depends on your priorities, existing cloud strategy and use-cases (both now and in the future). This blog has highlighted some of the strengths of AWS for running Microsoft-based applications.
Migrating to and successfully using the cloud is far more than a technical challenge of just running your application in the cloud. It also needs to take into account the needs of security, governance, finance and the business priorities. All of these contribute to the right choice of cloud provider. A partner such as Cloudsoft can help you choose and prepare for your cloud journey.