# What is “AWS”?
AWS stands for Amazon Web Services and it’s a huge suite of cloud services offered by Amazon. You find anything from virtual instances/ servers over cloud file storage all the way to cloud-based machine learning and artificial intelligence services.
You can check my “AWS Basics” series to learn more about the core services.
In this article and the video you find above the article, I’ll walk you through the core service categories, some of the most important services and how they (can) work together.
# “Compute” Services
So if you got any code that needs to be executed - a web server and therefore also server-side language like Node.js for example - these services probably can help you.
AWS EC2 is one of the most used and important services offered by AWS. It allows you to bring up virtual instances - i.e. your own computers/ servers in the cloud. You can configure the hardware of these instances and then connect to them via the terminal.
Often, EC2 instances are used as web servers but you can in fact execute any code or application on them, you’re not limited to serving websites at all!
EC2 Auto Scaling is related to EC2, it simply allows you to configure rules which will automatically add or remove new EC2 instances as your demand grows/ shrinks (e.g. request spikes).
Elastic Load Balancing is also related to this - it ensures that incoming requests are evenly distributed across your running EC2 instances.
AWS Elastic Container Services
AWS Elastic Beanstalk
A very interesting service is Elastic Beanstalk. It could be called a “meta service” because it actually makes using a couple of other services (like EC2) easier. It’s built for developers who want to deploy their web app without spending hours or days learning how to set up and configure an EC2 instance, a database etc. It gives you default settings, some customization options and a bunch of best practices.
Lambda is an absolute core and must-know service offered by AWS! It allows you to run code on demand. This means, that you don’t need to select and spin up an EC2 instance. Instead, you just deploy your code, attach events that should trigger it and you’re good to go. The rest will be handled by AWS.
You also only pay for the executions - you don’t pay any idle time. Services like this one are called “Serverless services” because you don’t need to manage servers on your own (there are - of course - still servers involved behind the scenes).
Interested in that “serverless” stuff? I got a complete course where I walk you through all the core serverless services by building a complete web app!
# “Storage” Services
To store and work with such files, AWS got a couple of services that can help you.
The most important data storage service is AWS S3. It’s actually the service AWS originally started with and it’s an object storage service.
That means, that it’s built to store files of all kinds - images, videos, text documents. You could use it as your own personal cloud file storage or you access it via your code running on AWS EC2 or Lambda or through one of the other services offered by AWS.
EBS & EFS
AWS EBS and EFS are storages you can attach to EC2 instances. Such instances do have some built-in storage but if you need more space or need to access one and the same filesystem from multiple instances, EBS and EFS allow you to add exactly those functionalities.
Glacier is AWS’ long-term archiving service. You can store data on it very cheaply, the downside is that you actually can’t retrieve it instantly. Instead, you can issue a “data pull request” and then wait for a couple of hours until data is restored. It’s a great solution for any kind of data you need to archive for a very long time though.
AWS Snowball & Snowmobile
These are services that help customers migrate (huge amounts of) data into the cloud. This might sound trivial but if you got petabytes or even exabytes of data to transfer, than these services will help you get your data into the cloud.
# “Database” Services
You typically store this kind of data in a database. And there’s not just one kind of database - you could go for a SQL or NoSQL or graph-database solution. AWS of course got a couple of services that help you with that.
Aurora & RDS
RDS stands for Relational Database Service and it allows you to bring up a database server running engines like MySQL or MSSQl. Aurora is AWS’ custom database engine - an especially powerful and cost-efficient solution indeed.
You can choose from different configurations (CPU, memory, …) and then connect to your database from an EC2 instance, Lambda code, your code running on your own datacenter or any other application you might be running somewhere.
Maybe you don’t want a relational/ SQL database. DynamoDB is AWS’ serverless NoSQL alternative. It offers all the benefits of NoSQL databases and its serverless nature ensures that you only pay for what you use.
Often, you need to cache some data on the server-side. This can speed up the response time of your application and ElastiCache is a powerful managed caching service offered by AWS.
Redshift is AWS’ data warehouse offering. As such, it’s built to store data that you might import into your BI tools. It’s not the database you directly connect to your application - i.e. not the database that stores authenticated users etc. It’s mainly meant for analytics or archiving purposes.
I mentioned graph databases earlier. Graph databases are databases optimized for storing relations - something like users who have posts that have comments by other users. You can retrieve such connected data in a highly optimized and very efficient way with such databases. Neptune is AWS’ managed graph database service that you can add to your application if you got a lot of complex relations to store.
# “Migration” Services
# “Networking & Content Delivery” Services
But such applications are not worth much if you don’t get your content to your users of course. Or if your services can’t communicate with each other.
The services in this category allow you to add such communication - both between services and your services and your customers.
VPC stands for Virtual Private Cloud and it’s a service that enables you to create “fences” around your services. You can learn more about it here. VPC helps you group services together, control inbound and outbound traffic and create separated “clouds in the cloud”.
CloudFront is AWS’ CDN and it therefore is extremely important for ensuring that your content is served to your users efficiently. It speeds up the content delivery and allows you to easily add SSL encryption to your app as well.
Every web app needs a domain of course. Route 53 is AWS’ domain registrar - you can therefore use it to both register new domains and manage existing domains. You can define what’s getting served if a certain domain is entered by the user.
API Gateway is an extremely awesome service as it allows you to create a REST API without writing any code.
Instead, you can define endpoints (URLs + Http verbs) and what should happen when a request reaches such an endpoint. You can interact with S3, run Lambda code and do other useful things. It plays an especially important role when creating a serverless backend for your frontend.
API Gateway is a really important building block of serverless backends - you can learn all about it (as well as Lambda and more) in my Serverless course.
# “Developer” Services
The development process!
Obviously, you can develop locally but AWS also has services that allow you to move parts of or your entire development process into the cloud. That’s especially helpful for continuous deployment and integration (CI/CD) flows (this simply means that you got automated pipelines that build, test and deploy your code).
Cloud9 is AWS’ cloud-based IDE. You can use it instead of local IDEs like Visual Studio Code and it mostly shines because it has tight integration with other AWS offerings like Lambda.
CodeBuild, CodeDeploy & CodePipeline
These services help you with CI/CD, i.e. you can use them to configure deployment processes that build and test your code and push it into production automatically.
In modern applications, you typically deploy changes frequently (sometimes multiple times per hour) and hence such automated flows are a great help.
X-Ray is a service that allows you to trace the flow of data through your connected services - i.e. it can help you with debugging issues.
CodeStar is another “meta service” that simply builds up on the other development services and allows you to configure a cloud development environment and workflow without having to become an expert on the individual services. Think of it as Elastic Beanstalk for setting up a development workflow.
# “Management” Services
You can trace who (you probably got multiple users working in your account) did what, you can dive into logs of your (web) applications and you can generally understand which services you’re using (and how).
# “Media” Services
That indeed are the main things you do with these services. Either encode your media files in the cloud or serve them to your customers as streams or downloads.
Encoding in the cloud is interesting if you’re working with huge amounts of data or high-resolution content. Chances are that your local machine quickly reaches its limit then.
And streaming content as well as adding ads to it is of course a crucial part of any media-based, customer-facing business.
# “Machine Learning” Services
SageMaker is a fully managed service that abstracts away many of the complexities of machine learning processes. It allows you to focus on your data and not so much on setting up the appropriate resources and models. You can instead choose from a set of pre-defined services, prepare your data and set up how to apply the algorithm on it and then create and test your model. Once an optimized model is found, you can also directly deploy it into production.
Lex, Polly, Rekognition
These services take it one step further. They give you less freedom/ configuration possibilities but they offer you solutions to common AI problems that work out of the box.
To be precise, you can add speach and image recognition as well as Alexa-like bots relatively easy to your applications with these services.
Translate & Transcribe
The names of these services are self-explanatory. You work with them to transcribe media (i.e. convert it to text) and/ or to translate your text into other languages. You can combine these services with other services of course (e.g. to create a real-time translator bot).
# “Analytics” Services
Kinesis is worth pointing out as it makes analyzing streamed data (e.g. a smart device streaming temperature data) easy. Typically, that would be challenging since the data continuously updates, with that service it’s actually made simple
# “Security” Services
This category of services gives you everything you need to secure both.
The “Identity and Access Management” service is probably THE most important service offered by AWS. With it, you can configure fine-grained access control for users of your AWS account and even the services used in there.
You can learn more about IAM and how it works in this video.
Whilst IAM helps you secure your account, Cognito is a service that makes the addition of user authentication (login + signup) to your (web) apps a breeze.
It gives you useful things like email verification, password reset and safe storage of user data. Extremely useful!
# “Mobile Services”
They all can be used with mobile apps for sure but most of the services are not limited to that.
Actually, the “Device Farm” is the only service that does not help you with other kinds of apps (e.g. web apps) that much. It’s a service that allows you to test your mobile apps on a broad range of real native devices sitting in some AWS data center.
Pinpoint is the analytics and user communication (newsletter mails, SMS campaigns) service offered by AWS.
AppSync is a managed, serverless GraphQL service, giving you the possibility to easily set up a GraphQL API with the help of AWS. It’s basically an alternative to API Gateway which allows you to set up REST APIs instead.
Mobile Hub is another “meta service”. If you know Firebase, you can basically think of Mobile Hub as AWS’ answer.
It combines other services like API Gateway, DynamoDB or Lambda to allow users to build powerful backends without having to dive deeply into all these services.
# “AR & VR” Services
AWS Sumerian is a service that helps you with creating and running such experiences.
# “Application Integration” Services
These are not the only ways of connecting services but these services are mostly build for this orchestration task only. Other services serve other primary purposes and just happen to also have some connection capabilities.
The “Simple Queue Service” allows you to manage a job queue. A job is simply a data package holding any information of your choice. You can consume it with a couple of other services that simply poll the job queue and pull these information packages from it.
For example, you could have a user authentication (e.g. implemented via AWS Cognito and AWS Lambda) that includes the uploading of a user photo. That photo probably should be checked and resized but you want to do this after the primary authentication flow.
With SQS, a job can be posted on the queue and some other worker process (e.g. another Lambda function) runs every 5 minutes to poll that queue and handle any “photo checking” jobs it finds there.
SNS is comparable to SQS but instead of managing a job queue which gets pulled by other services (“pull approach”), you got a push service here.
This means that you can push new information (e.g. a data package describing some task that should be performed) to some other service (e.g. a Lambda function).
AppSync was described earlier - it doesn’t really fit that well into this category to be honest. It’s not so much about letting services communicate, it’s a managed GraphQL API service instead.
Got multiple Lambda functions that depend on each other? Step Functions is a service that helps you orchestrate these functions.
You can pass results between functions, run them in parallel or connected through conditions and therefore, you can maintain control over your execution flow.
# “Customer Engagement” Services
This is a service that allows you to set up a callcenter, manage and assign incoming calls and in general provide support to your customers.
Pinpoint is AWS’ analytics and marketing service. You can keep track of all kinds of events in your application (e.g. a customer clicked a button) and reach out to your users via email or text message campaigns.
Simple Email Service (SES)
Pinpoint already allows you to send emails as part of marketing campaigns. SES is a more general emailing service. You can use it to send emails to your users as needed by your applications. That can be bulk emails (e.g. newsletters) but can also be transactional notifications (e.g. “Thanks for signing up!”).
# “Business Services”
WorkMail is basically AWS’ alternative to GMail for example.
You got different services for managing workspaces and desktops in the cloud or working with documents.
# “Internet of Things (IoT)” Services
AWS provides services that you can use to connect your smart devices to the cloud OR run logic directly on the devices (AWS Greengrass allows you to do that). So these are not just cloud services - instead, you find services that help you with IoT-devices in general.
# “Game Development” Services
# AWS Marketplace
The AWS Marketplace is the place where you can sell or buy such services.