1. AWS EC2 – Elastic Compute Cloud

Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides secure, resizable compute capacity in the cloud. Amazon EC2’s simple web service interface allows you to obtain and configure capacity quickly and with minimum effort.

EC2 provides a set of predefined instance profiles, or virtual server definitions, to create virtual machines. You can choose your VM configurations from any of the predefined instance types. VM instances can be memory-optimized, compute-optimized, or storage-optimized.

Users can also create and customize instance profiles to suit their needs. Instances can be self-provisioned or auto-scaled (when integrated with Amazon Auto Scaling) on demand, and stopped when not required, thereby saving costs.

EC2 instances can also be used to deploy containers. You can deploy and manage your own cluster of EC2 instances for running the containers.

Choosing the correct type of AWS EC2 instance is important. The wrong EC2 choice could adversely impact business and user experience. Read my article on an EC2 performance monitoring real-world case study to learn more about EC2 instances and how to go about choosing one that’s right for your needs.

2. AWS RDS – Relational Database Service

Almost all applications deployed in AWS will need access to a database. This is where AWS’ Relational Database Service (RDS) fits in. RDS is a managed service from AWS using which you can set up, operate and scale a relational database in the cloud easily. As with EC2, Amazon RDS is available as several predefined database instance types – optimized for memory, performance or I/O. You can also pick the database engine of your choice from the six supported technologies including Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle Database, and Microsoft SQL Server. One of the key advantages of RDS is that the managed service automates time-consuming administration tasks such as hardware provisioning, database setup, patching and backups.

3. AWS Lambda

AWS Lambda is an event-driven, serverless computing service that lets you run code without provisioning or managing servers. With Lambda, you can upload your code as a ZIP file or container image, and Lambda automatically and precisely allocates compute execution power and runs your code based on the incoming request or event. You can write Lambda functions in your favorite language (Node.js, Python, Go, Java, and more) and use both serverless and container tools, such as AWS SAM or Docker CLI, to build, test, and deploy your functions.

It is important to note that serverless as an execution model is meant for workloads that are ephemeral and event-triggered. Good serverless design principles state that one should assume that the environment exists only for a single invocation. If you are depending on data structures or temporary files to hold internal state between multiple invocations, serverless is not the right design choice.

AWS Lambda limitations

4. AWS S3 – Simple Storage Service

Amazon S3 or Amazon Simple Storage Service is a service that provides is cloud-based persistent storage through a web service interface. It’s built to store, protect and retrieve data from “buckets” at any time, from anywhere, on any device.

Amazon S3 is a simple key-based object-store. It enables you to simply put data in the cloud and pull it back out through standard REST- and SOAP-based web service APIs. You are shielded from the details of how it is stored or where it is actually stored. When you store data, you assign a unique object key that can later be used to retrieve the data. Keys can be any string, and they can be constructed to mimic hierarchical attributes. Alternatively, you can use S3 Object Tagging to organize your data across all of your S3 buckets and/or prefixes.

Using this service, you can easily build applications that make use of cloud native storage. S3 gives you access to the same scalable, reliable, secure and inexpensive infrastructure that Amazon uses to run its own global network of websites. Since S3 is highly scalable and you only pay for what you use, you can start small and grow your application as you wish, with no compromise on performance or reliability.

While designed for developers for easier web-scale computing, it provides 99.99999% durability and 99.99% availability of objects. The popularity of S3 also can be attributed to its cost-effectiveness.

Update Aug 2023: An insightful article from engineers on the S3 team has been published, an interesting and enjoyable read: Building and operating a pretty big storage system called S3 | All Things Distributed.

Tip for Building applications that use AWS S3

5. AWS ECS – Elastic Container Service

Amazon Elastic Container Service (Amazon ECS) is a highly scalable, fast container management service that makes it easy to run, stop, and manage containers on a cluster. ECS comes with two launch types: EC2 and Fargate. The containers can run on a serverless infrastructure that is managed by AWS Fargate. Alternatively, for more control over your infrastructure, you can run your tasks and services on a cluster of Amazon EC2 instances that you manage. The containers can run on a serverless infrastructure that is managed by AWS Fargate. Alternatively, for more control over your infrastructure, you can run your tasks and services on a cluster of Amazon EC2 instances that you manage.

You can schedule the placement of your containers across your cluster based on your resource needs, isolation policies, and availability requirements. With Amazon ECS, you don’t have to operate your own cluster management and configuration management systems or worry about scaling your management infrastructure.

AWS Fargate removes the need to provision and manage servers. Instead, you simply specify the resources per task, which also improves security through application isolation by design.

With AWS Fargate, you don’t have to provision, configure, or scale groups of virtual machines on your own to run containers. You also don’t need to choose server types, decide when to scale your node groups, or optimize cluster packing. You can control which pods start on Fargate and how they run with Fargate profiles.

AWS elastic container Service (ECS) pros and cons

6. AWS EKS – Elastic Kubernetes Service

Amazon EKS is a managed Kubernetes service that makes it easy for you to run Kubernetes on AWS and on-premises. EKS lets you run your Kubernetes applications on both Amazon EC2 and AWS Fargate.

EKS runs the Kubernetes control plane across multiple Availability Zones, automatically detects and replaces unhealthy control plane nodes, and provides on-demand, zero downtime upgrades and patching. EKS offers a 99.95% uptime SLA. At the same time, the EKS console provides observability of your Kubernetes clusters so you can identify and resolve issues faster.

With EKS, you have the advantage that any application running on EKS is compatible with one running in your existing Kubernetes environment. You can migrate to EKS without applying any changes to code.

AWS ECS vs EKS-How to choose?

7. AWS SQS – Simple Queue Service

Amazon SQS is a fully managed event-queuing service that enables you to decouple and scale microservices and serverless applications.

Using SQS, you can send, store, and receive messages between software components at any volume, without losing messages or requiring other services to be available. If no workers pull jobs from SQS, the messages stay in the queue.

SQS offers two types of event queues. Standard queues offer maximum throughput, with best-effort ordering and at-least-once delivery. SQS FIFO queues offer event processing in the exact order that events are sent, with exactly once processing guarantee, although it comes with a throughput constraint.

AWS SQS monitoring tips

Since it is a fully managed message queuing service, SQS eliminates the complexity and overhead associated with managing and operating message-oriented middleware and empowers developers to focus on their core tasks.

You can scale the amount of traffic you send to Amazon SQS up or down without any configuration. Amazon SQS also provides extremely high message durability, giving you and your stakeholders added confidence.

8. AWS DynamoDB – NoSQL Database Services

DynamoDB is Amazon’s NoSQL database solution that supports document and key-value data models. It’s a fully managed, multi-region, multi-active, durable database with built-in security, backup and restore, and in-memory caching for internet-scale applications.

You get built in automatic backup and restore, security, and multiregion, multimaster distribution along with in-memory caching.

DynamoDB is an ideal fit for internet-scale mobile, web, gaming, IoT, retail, media, and entertainment applications that require single-digit millisecond low latency data access and need to support petabytes of data. DynamoDB can automatically scale up/ down, and provides ACID transactions support. Your DBAs do not need to provision, patch, or manage servers. There’s no software to install, maintain, or operate.

9. AWS WorkSpaces

To support remote workers and enable organizations to have virtual desktops in the cloud, AWS provides Amazon WorkSpaces, a fully managed, persistent desktop virtualization service that enables your users to access the data, applications, and resources they need, anywhere, anytime, from any supported device. Windows or Linux desktops can be provisioned in a few minutes. Amazon WorkSpaces is deployed within an Amazon Virtual Private Cloud (VPC), and no user data is stored on the local device. For non-persistent desktops and virtualized applications, AWS supports AWS AppStream 2.0, another service offering.

10. AWS CloudFront – Content Delivery Network (CDN) Platform

AWS CloudFront monitoring Tips

CloudFront is a content delivery network (CDN) service that enhances the user experience of any application running in the AWS cloud, outside the cloud, or on premises. The data is cached at the AWS edge locations, also known as points of presence (POPs). These locations are used to deliver data, videos, images, apps, and APIs with high transfer speeds and low latency to consumers. It provides you with the ability to cache common responses from your HTTP/HTTPS web application by caching the responses to GET, HEAD, and OPTIONS HTTP methods, thus making it seem as if the application front end is much closer to the user than it actually is.

It is often used in tandem with S3 to capture clickstreams from it and follow visitors as they navigate through other applications. CloudFront is secure and resilient to L3 and L4 DDoS attacks when used with AWS Shield.

Other Services

Besides the above there are hundreds of other AWS offerings in other areas. For example, there is the Simple Notification Service (SNS) for one-to-many push notification and the Simple Email Service (SES) for secure email delivery.

AWS Cloud services by popularity

There are several infrastructure services that are essential for any AWS-based service. These include Elastic Load Balancing (ELB), Virtual Private Cloud (VPC) for security and privacy, and Elasticache for in-memory caching and processing of large amounts of data. All of the AWS services rarely operate in isolation. Combinations of services are used to deliver the functionality required by IT organizations today.

Conclusion

We walked through the top 10 AWS services and their use cases. AWS offers well over 200 services that cut across computing, networking, storage, databases, application services, machine learning and analytics, and tools for the Internet of Things (IoT).

AWS is wide and deep with many moving parts: AWS offers a wide spectrum of services that can be used by organizations who are adopting cloud technologies to power their business applications. A typical application deployment will use a number of these services working in unison to achieve the application goals.

You need the right monitoring tools: While these services can save your organization valuable time and effort as you deploy your applications, at the same time, bear in mind that when performance issues occur, you must have monitoring in place to track the performance of each AWS service as well as your application components.

Performance issues could lurk anywhere: Performance problems, regardless of where the application is hosted, could manifest in a variety of tiers – browser, network, host server, containers, JVM (Java Virtual Machine)/ CLR (Common Language Runtime), application code and SQL, databases or the underlying cloud infrastructure. Sometimes the problem could be with the cloud vendor’s physical machine (example: faulty NIC card or bad driver) that you may not have access or visibility into.

Correlating across logs, metrics, traces and events: Correlating between performance at each tier and quantifying the end user experience and business impact will provide you insights into why performance issues have occurred and resolve them quickly. This is especially important when you may have to substantiate with evidence in conversations with the cloud provider’s support team that the action is on them to fix the issue. You need both breadth and depth in the form of logs, metrics, traces and events across the system.

This is where monitoring tools like eG Enterprise come in. Using an integrated application and infrastructure monitoring approach, eG Enterprise gives you breadth and depth of AWS monitoring visibility from a single console.

About the Author

Arun is Head of Products, Container & Cloud Performance Monitoring at eG Innovations. Over a 20+ year career, Arun has worked in roles including development, architecture and ops across multiple verticals such as banking, e-commerce and telco. An early adopter of APM products since the mid 2000s, his focus has predominantly been on performance tuning and monitoring of large-scale distributed applications.