Skip to content

Things I don’t like about AWS

First published: 2021-01-20

Last Updated: 2021-11-28

Full disclaimer – I am an Amazon Web Services fan boy. I love their cloud offering and I proudly hold 3 AWS certifications. Through my day job, I am also getting exposed to Azure. Yes I know – Azure is a swear word amongst Amazonians, but the reality is that many companies do dabble in multi-cloud strategies. Some cloud providers are better at some things than others, some features are just nicer than others, so with that, I decided to start putting a list together of some of the cool (and not so cool) features I have spotted on both platforms.

Having said that – because I love the AWS service, I also feel it is my duty to point out where I think they need to improve their service. Even though Gardner puts them as a leader in the cloud space, there still are some things I think they can improve.

This blog post will be updated from time to time, so do come back to see the updated list. Do you have some items you’d like to add? Post them in the comments.

Summary

The summary page shows the high level items as I discovered them, and the status if the item is still an issue or not.

Requirement AWS Azure
See all resources in one screen
Generate Infrastructure-as-Code (IaS) templates
Administer a database from the portal
Websites from storage linked to a domain name
Lambda Python runtime is missing requirements.txt
CloudFormation cannot load stacks from a URL

See all resources in one screen

When you log onto Azure, you are able to see different resources from every region, all on one page. This is great when you are playing around in the cloud platform, you can simply go and delete it all when you’re done.

In AWS? No.. You have to switch to the region, and then switch to the specific service to see what is in there, so, if you’re playing around and learning new services, do remember to go clean it up afterwards, or you may end up with bill shock!

Update on 2021.10.01 – AWS now offers the ability to view all resources in one screen.

Generate Infrastructure-as-Code (IaS) templates

Here Azure is also leading. You can build your environment, and right from the console you can generate an ARM template. This is a great way to develop, package, and then deploy a consistent infrastructure to your production platform.

Sadly AWS does not offer this. CloudFormation is good for deploying resources, but there is no tool to analyze a cloud account, and generate CloudFormation templates from it. This is unfortunate, as Azure makes it very easy with per-generated templates to help developers adopt the IaC mindset.

Administer a database from the portal

When you’re using a PaaS-style database, be it Aurora or RDS, sometimes you need to poke a few SQL commands against the database. Azure offers a SQL Query Analyzer-style interface where you can log onto your SQL database, straight from the Azure portal. AWS however does not have this. It is always a hassle to spin up a separate EC2 instance, configure security groups, install a web server and install phpmyadmin. Surely something as common as administering a SQL server can be a basic service offered by AWS.

Websites from storage linked to a domain name

Hosting websites from S3 is a great feature. You can load all the HTML, JavaScript, CSS, and anything else your website may require into an S3 bucket, and then turn that S3 bucket into a website. Now you get into a situation where you want to attach your own domain name to S3 website hosting, you’ll find the only way to achieve this, is to attach the S3 bucket to CloudFront, AWS’ CDN solution. CloudFront allows you to attach your own domain name to it, so while it would’ve been nice if S3 supported custom domains without the use of CloudFront, you, the customer, will have to cough up additional cash to Amazon copy your content over to CloudFront, and serve it all over the world.

I will add, CloudFront is a great service, if you need to serve content all over the world, and you don’t mind spending a few extra dollars for your hosting. For smaller businesses, they tend to operate within a geographical region, and then using CloudFront for an S3 bucket may not always make sense. There are ways you can achieve caching of content through http headers without the need of using a CDN.

  • 2021.06.20 – If you create the S3 bucket name with the exact same name of the domain you’d like to host, then you’re able to use S3 hosting by redirecting your domain name with a CNAME to the S3 web URL. See this link for more details.
  • 2021.11.21 - AWSSecurity.info is now hosted on CloudFront with S3. See this post for more information.

Lambda Python runtime is missing requirements.txt

I do plenty of programming in Python, and I do like to schedule my code to run as Lambda functions. Just once in a while, I may want to use a Python module that is not installed by default on the Lambda Python runtime. Alas, that the option to install modules through a requirements.txt file does not exist. Instead, AWS suggests you download the modules, zip it up, and store that in an S3 bucket. That sounds like way too much work. Azure functions have you covered. Just specify the requirements.txt file, and the function will install all the modules for you.

CloudFormation cannot load stacks from a URL

CloudFormation allows you to create infrastructure from code, allowing consistency and control over what gets created right through the entire track, from development, through to testing, and ultimately into your production environment. You may want to load code hosted on a repository somewhere, but unless that repository is an S3 bucket, you won't be able to use it. Instead you have to upload the file from the URL to an S3 bucket first, before it can be consumed by CloudFormation. While I can recognize the security aspect around it, it does feel like a bit of a let-down for something as basic as Just read the stack from this URL instead. This is how you can do it in Azure.