AWS has almost has 200 different services to choose from, all doing different things. In this blog post, I’m going to explain the Top 5 Most important AWS Services to learn for 2021. This article assumes you already have some familiarity with AWS services are terminology, but isn’t necessarily required.
Counting down from number 5…
#5 – Amazon Eventbridge
Amazon Eventbridge is an Event Bus that enables developers to communicate events to each other asynchronously. There is a little bit of overlap between Eventbridge and SNS, but Eventbridge has some key features that SNS does not.
Eventbridge allows developers to ingest events from third party integrations such as companies like PagerDuty, ZenDesk, Auth0, and other Saas providers. Developers can receive notifications when events occur on these platforms and deliver them to over 100 different AWS targets including AWS Lambda, SNS, and many more.
Eventbridge appears to be an improvement on SNS. It offers a structured schema design process that allows subscribers to take dependencies on the schemas, instead of having developers hunt for your event’s structure. It includes other features such as message filtering, automatic retry policies, monitoring tools, and guaranteed event destination delivery.
#4 – AWS CloudFormation + CDK
AWS CloudFormation is an older service that has slowly picked up steam over the years. It seemed to get popularized as Infrastructure via Code started to pickup steam a few years ago.
CloudFormation allows you to treat your infrastructure as code. You as the user create a template in JSON or YAML format and upload your template to CloudFormation via a Stack. Stacks get deployed by AWS and they handle the business of creating the resources. Developers get to specify configuration and easily replicate it from region to region as companies grow.
Unfortunately, defining resources using JSON or YAML get old quick. Sometimes you end up with template files hundreds if not thousands of lines long.
CDK (cloud development kit) is an improvement on the template model. It allows you to create your infrastructure through a programming language of your choice. All of this eventually gets compiled down to CloudFormation and deployed anyways, but it sure makes it a whole lot easier to create resources. It turns out primitives and control structures sure help out from the reusability perspective. Who knew?
Regardless of your feelings on CloudFormation or CDK, its a fact that the industry is heading towards Infrastructure as Code as the standard. Developers need to get on deck with this technology so they don’t fall behind.
#3 – Amazon Elastic Container Service (ECS)
Amazon ECS is AWS’ foray into managed containers. ECS allows developers to upload their built images to a sister service, Elastic Container Repository. Once uploaded, you can either one off tasks to execute a job via container, or deploy a full fledged REST service with autoscaling.
ECS supports two run compute modes, EC2 based or Serverless. EC2 based means that you need to have available EC2 instances to run your Docker containers on. A ECS agent gets installed on your EC2 machines that communicates with the ECS control plane.
The serverless option is via Fargate. In this mode, you don’t have to deal with servers at all. AWS is responsible for finding, provisioning, and running your tasks on servers. This is great from a simplicity perspective, but its not for everyone (especially those of you who prefer fine tuning their machines).
I personally am seeing a lot of companies adopt Docker as their primary virtualization platform. With ECS, developers now have an opportunity to host and deploy their containers and let AWS worry about the management.
#2 – AWS Lambda
AWS Lambda is Amazon’s serverless compute compution. It lets developer not worry about code, and instead just worry about writing their logic via code.
AWS handles the provisioning of resources to handle your function’s executions. Developers use Lambda for a variety of tasks including hosting REST APIs, performing adhoc tasks, running cloud-based cron jobs, and many many more use cases.
Over the years, AWS has continued to invest in Lambda and the service is becoming much more mature. Improvements to the dreaded ‘cold start’ problem through provisioned capacity have made AWS Lambda viable for latency sensitive applications. AWS also recently released new tools to monitor and optimize your application as discussed in my other post.
I continue to see more and more companies adopt Lambda as their primary compute option. The amount of time saved in absence of performing compute maintenance is an attractive reason so many companies are compelled to switch over.
#1 – Amazon Aurora Serverless
Aurora is AWS’ managed RDS service. It offers two database options for their serverless option: Postgres and MySQL.
Prior to re:Invent 2020, Aurora Serverless was a great idea, but struggled to be a viable choice for latency sensitive applications. It dreaded from the problem of cold start, where during periods of database inactivity, all instances hosting that database were spun down to preserve costs. When a request came in, a new instance would need to be found and the database quickly provisioned. This caused latencies of up to 1 minute for the initial few requests.
This problem has been solved as of December 2020 and is now a thing of the past! For this reason, I think Aurora serverless is now a viable option for folks looking to use traditional SQL based engines, but hosted in a serverless way.