I've been very deeply involved in the AWS cloud landscape for almost two years now, and before that, I had casually used a couple of AWS cloud resources - EC2 and S3 since pretty much the very beginning of their existence. Although I have spent far, far less time with the Google and Microsoft cloud offerings, I thought an overview of all three was worth doing.
This blog post will be a big overview of how Azure and Google cloud compare to each other and AWS, from a very high-up perspective. I will also be focusing this overview, and any subsequent posts, on the ability of these resources to run python. I'll then have more blog posts as I dive into trying a specific set of projects on each. All three of these platforms are huge, and have many, many features. For this particular post, I'm going to focus on five of them. These are the resources that I generally use for my projects:
- Virtual Machines
- Serverless Compute
- SQL servers
- NoSQL databases
- File Storage
Like AWS, Azure has a library of virtual machine images, although my first impression is that it is not as large a selection as AWS has. But the major Linux and Unix distributions (Red Hat Enterprise, Ubuntu, FreeBSD, etc.) are there, as well as (of course) Windows Server. There are a wide variety of what they call "Solution Templates" which is the equivalent to AWS "Marketplace" AMIs. Google Cloud also has a large selection of virtual machines (interestingly, the default is Debian,) and a large marketplace of other kinds of solution-specific images. In general, it looks like AWS has the largest selection, followed by Azure, followed by Google. And there are definitely some that don't overlap - so if you have a very specific need for a solution image, it's worth checking out all three to see if one or more has it.
It's hard to compare pricing for these three cloud services - it's not always an apples-to-apples comparison. This calculator is an interesting tool. A 2 core, 8GB RAM instance running 24/7 would cost from $59.90 for AWS, $33.84 for Azure, and $59.60 for Google cloud (each for a no contract, no up-front fee instance.)
AWS has three basic forms of serverless compute: Elastic Beanstalk (which is focused on web applications,) Lambda for microservices, and Container services for Docker and Kubernetes. The equivalents for Azure are "Web Apps", "Functions", and "Containers". Azure Web Apps and Functions can run Python code. Like AWS, you can use Docker or Kubernetes on Azure. (In both AWS and Azure some container features are restricted by region.) The equivalents for Google cloud are "App Engine", "Cloud Functions", and "Kubernetes Engine". (You can run Docker images in App Engine.) All of these allow you to run Python apps and code as well.
AWS has RDS, which has various database instance types, including MySQL, MS SQL Server, Oracle, PostgreSQL, and MariaDB (The fork of MySQL that happened after Oracle bought MySQL.) AWS Aurora is a new AWS-specific RDBMS, in MySQL and PostgreSQL compatible flavors. Azure includes SQL Server, MySQL, and PostgreSQL. It does not have Oracle or MariaDB. Google Cloud only has PostgreSQL and MySQL.
Again, pricing is hard to gauge because it's not alway apples-to-apples. According to this calculator an Azure SQL server running 24/7 would cost more than $1,400/month, which seems crazy talk. And it looks like you can't get anything smaller. The equivalent server (cores, storage) on AWS would be about $483.57. Google's largest SQL instance would cost $68/month, but it seems a much smaller instance size than these others. You can get a small RDS instance on AWS for as little as $17/month.
AWS has DynamoDB, their proprietary NoSQL server. Azure has their CosmosDB, and Google cloud has Datastore and Firestore (their updated Datastore.) These are all three schemaless servers, CosmosDB and DynamoDB have the key/value store model, CosmosDB and Datastore/Firestore have document store models. CosmosDB as well as Firestore seem to have SQL-like query languages, which DynamoDB does not have. CosmosDB and Datastore/Firestore seem to have ACID transactions. This is a nice comparison table of the three of them.
AWS' primary file storage feature is S3, which has been around for a long time. Files are stored in "Buckets", and can be made available to the public, and can also serve HTML/CSS/JS. AWS also has Glacier, the less-expensive, lower availability service. Google cloud storage is also called "Buckets", and you can also configure these to serve HTML/CSS/JS. Azure has a concept of "storage accounts", which include different types. You can also host static websites on Azure storage accounts.
Pricing for AWS and Google are almost exactly the same for 50 GB of storage, and 1,000,000 reads and 1,000,000 writes per month: $7. Azure is $31.20 for that same storage.
In general, in reviewing and reading around about these three services, it seems that Azure is the most expensive of the group, except perhaps for Virtual Machines. Although with the caveat that it can be very difficult to compare these services at times. Google seems to have the fewest options of the services that I looked at, and AWS the most, with Azure in the middle (closer to AWS.) AWS still has the dominant market share, with Microsoft in the middle, and Google at the bottom. Reference