Taking the first step
Introduction
Containers are a key component of modern app development. They have become the standard way to organize compute resources, and manage the content of your application deployments.
Containers provide a discrete reproducible compute environment. They also provide a way to simplify packaging and dependency management. From the orchestration of very large multi-cluster estates to web applications - or even testing your work and doing a proof of concept on your laptop - they are a great way to get started and build software to deploy in the cloud.
This decision guide helps you get started and choose the right AWS container service for your modern app development.
This four-minute excerpt is from a 57 minute recording of a presentation by Vikram Venkataraman, a principal technical account manager at AWS, given at AWS Summit DC 2022. It provides an overview of available AWS container services.
Time to read
20 minutes
Purpose
Help determine which AWS container service is the best fit for your organization.
Level
Beginner
Last updated
April 26, 2023
Covered services
More decision guides about
Understand
Containers have become a de facto standard for packaging application code, configurations, and dependencies into a single artifact, because they can be deployed in a consistent manner to multiple environments.
Containers are a key piece of any modern application development strategy. To provide some context for container-related AWS services, the image on the right shows the available AWS container options by layer (explained more fully in this video).
Capacity
Capacity refers to the underlying compute that you will deploy your container to, your central processing unit (CPU), and memory requirements. Capacity is the infrastructure the container is going to run on. There are two choices for capacity for your containers on AWS:
- Amazon Elastic Compute Cloud (AmazonEC2) allows you to run your containers on virtual machines that you manage.
- AWS Fargate is a serverless compute engine for containers that allows you to run containers without managing the underlying infrastructure. With Fargate, you can launch and scale containers without worrying about the underlying EC2 instances.
Orchestration
It is not uncommon for organizations to be running not one or a few but thousands of containers. It becomes challenging to manage such a complex environment. Orchestration services help facilitate the deployment and management of these applications. AWS offers three orchestration services:
- Amazon Elastic Container Service (Amazon ECS) is a fully managed container orchestration service and is ideal for organizations that want a simple and cost-effective way to deploy and manage containerized applications.
- Amazon Elastic Kubernetes Service (Amazon EKS) is a fully-managed Kubernetes service that allows you to run and manage Kubernetes clusters on AWS.
- Red Hat OpenShift Service on AWS (ROSA) is a fully-managed OpenShift service that allows you to run and manage OpenShift clusters on AWS. It is a good option for customers who are already running OpenShift on premises.
Provisioning
Provisioning provides an interface to the orchestration layer of services. Each orchestrator comes with its own complexities. Provisioning services hide this complexity and helps make it easier for you to consume the service. AWS services in this category include:
- AWS App Runner is a fully-managed service that automatically builds container images from your source code, deploys the containers to a fully-managed infrastructure, and scales them based on demand.
- AWS Elastic Beanstalk is a fully-managed service that makes it easy to deploy, manage, and scale web applications. Elastic Beanstalk also supports containers and provides a fully-managed platform for deploying and scaling containerized applications.
- Amazon Lightsail is a simple and cost-effective way to launch and manage virtual private servers, but also offers support for containers, allowing you to create and deploy containerized applications using Lightsail instances.
Consider
It's important to choose a container service that aligns to your application requirements and operational preferences. The following section outlines some of the key criteria to consider when choosing a container service, as well as supporting tools and services.
-
Managed service & operation overhead
-
Workload Characteristics
-
Application portability
-
Organization size and skills
-
Ease of deployment
-
Organizations may choose the cloud to reduce operational cost by standardizing on managed services that shift the operational burden to AWS. Higher levels of abstraction allow developers and operators to focus on their own unique value-add activities, instead of undifferentiated tasks.
Building with containers on AWS uses services with higher levels of abstraction to shift the operational overhead of maintaining infrastructure to AWS.
-
You can more easily make architecture choices by understanding your workload patterns. This may include web applications, API-based microservices, event-driven applications, streaming and messaging, data pipelines, IT automations, and more. Some workloads will perform better or be more cost effective in a one compute environment versus another type.
-
Many customers want to ensure that their applications can run in - and be easily migrated or moved to - a different environment. It's important for them to be able to preserve choice, or run an application both on-premises and in the cloud.
We recommend building competency in software architectures and build packaging that allows you to more readily port differentiating business logic between compute services.
Applications built using some technologies may run more effectively on some compute services versus others.
-
The skills of your organization are a major factor when deciding which container services you use. The approach you take will require some investment in DevOps and Site Reliability Engineer (SRE) teams. Building out an automated pipeline to deploy applications is common for most modern application development.
Some choices elevate the amount of management. For example, some organizations have skills and resources to run and manage a Kubernetes implementation, because they invest in strong SRE teams to manage Kubernetes clusters. These teams handle frequent cluster upgrades (for example, Kubernetes has three major releases a year, and deprecates old versions).
Organization size is a key factor, as smaller startups might have a small IT staff made up of people fulfilling multiple roles, while larger enterprises may support hundreds of workloads in production at once.
-
Different AWS container services meet unique needs in terms of deployment complexity. Here's how each service is optimized for its own role:
- AWS AppRunner offers the simplest path, allowing you to deploy your application on the public internet without managing or customizing the underlying infrastructure.
- Amazon ECS is a good choice if you need a little more control over the network and security configurations without sacrificing scale or features.
- Amazon EKS can allow you to use the flexibility and control over application deployment and orchestration provided by Kubernetes technology.
- AWS AppRunner offers the simplest path, allowing you to deploy your application on the public internet without managing or customizing the underlying infrastructure.
Choose
Now that you know the criteria by which you will be evaluating your container options, you are ready to choose which AWS container service(s) may be a good fit for your organizational requirements.
The following table highlights which services are optimized for which circumstances. Use the table to help determine which container service is the best fit for your organization and use case.
Capacity options
Capacity refers to the underlying compute that you will deploy your container to, your CPU, and memory requirements. Capacity is the infrastructure the container is going to run on.
Amazon EC2 is a web service that provides resizable computing capacity - using servers in Amazon's data centers - that you use to build and host your software systems.
AWS Fargate is a technology that you can use with Amazon ECS to run containers without having to manage servers or clusters of Amazon EC2 instances. With Fargate, you no longer have to provision, configure, or scale clusters of virtual machines to run containers.
Container orchestration
Container orchestration services manage when and where your containers run.
Red Hat OpenShift Service on AWS (ROSA)
Red Hat OpenShift Service on AWS makes it simple to create and operate Red Hat OpenShift clusters on AWS. For applications already containerized on premises on OpenShift Container Platform, ROSA provides a familiar API surface and keeps the deployment toolchain the same so you can focus on refactoring the data model, not the entire application stack.
Amazon Elastic Kubernetes Service
Amazon EKS helps you start, run, and scale Kubernetes applications in the AWS Cloud or on-premises.
Amazon ECS is a fully managed container orchestration service to help deploy, manage, and scale containerized applications.
Provisioning
The provisioning category of services provide an interface to the orchestration layer of services. Each orchestrator comes with its own complexities. Provisioning services hide this complexity and make it easier for customers to consume the service.
With Elastic Beanstalk, you can quickly deploy and manage applications in the AWS Cloud without having to learn about the infrastructure that runs those applications. Elastic Beanstalk reduces management complexity without restricting choice or control.
AWS App Runner allows you to build and run containerized applications on a fully managed service with minimal infrastructure knowledge.
Lightsail offers easy-to-use virtual private server (VPS) instances, containers, storage, databases, and more at a cost-effective monthly price.
Tools
Tools to provide a container registry as well as containerize and migrate existing applications.
Amazon Elastic Container Registry
Amazon ECR is a fully managed container registry offering high-performance hosting, so you can reliably deploy application images and artifacts anywhere.
On-premises
Allows you to run a familiar control plane to ensure a consistent experience no matter where your container-based applications are running.
Amazon Elastic Container Service (ECS) Anywhere
Amazon ECS Anywhere is a feature of Amazon ECS that lets you run and manage container workloads on your infrastructure.
Amazon EKS Anywhere lets you create and operate Kubernetes clusters on your own infrastructure.
Amazon EKS uses Amazon EKS Distro, a Kubernetes distribution built and maintained by AWS. Amazon EKS Distro makes it easier to create reliable and secure clusters.
Use
You should now have a clear understanding of each AWS container service (and the supporting AWS tools and services) and which one might be the best fit for your organization and use case.
To explore how to use and learn more about each of the available AWS container services, we have provided a pathway to explore how each of the services work. The following section provides links to in-depth documentation, hands-on tutorials, and resources to get you started.
-
Amazon EC2
-
Amazon ECR
-
Amazon ECS
-
Amazon EKS
-
Amazon Lightsail
-
AWS App Runner
-
AWS Elastic Beanstalk
-
AWS Fargate
-
ROSA
-
Amazon EC2
-
Getting started with Amazon EC2
Access the complete set of Amazon EC2 technical documentation, including guides to Linux and Windows instances.
VM Import/Export User Guide
Learn how to import virtual machine (VM) images from your existing virtualization environment to Amazon EC2, and then export them back.Amazon EC2 Auto Scaling with EC2 Spot Instances
Learn how to create a stateless, fault tolerant workload using Amazon EC2 Auto Scaling with launch templates to request Amazon EC2 Spot Instances.
Deploy a Web Application on Amazon EC2
We walk you through creating an Amazon EC2 instance using AWS CDK, and deploying a web application on it.
-
Amazon ECR
-
What is Amazon Elastic Container Registry (ECR)?
A guide to getting started with - and using - ECR.Amazon ECR in Multi-Account and Multi-Region Architectures
Explore key considerations for Amazon ECR architectures that span across AWS accounts and AWS Regions, and architectures related to hypothetical customer use cases.
Create a pipeline with an Amazon ECR source and ECS-to-CodeDeploy deployment
Configure a pipeline in AWS CodePipeline that deploys container applications using a blue/green deployment that supports Docker images.
-
Amazon ECS
-
Getting started with Amazon ECS
This guide provides an introduction to the tools available to access Amazon ECS and introductory step-by-step procedures to run containers.
What's new and what's next with Amazon ECS
Learn what’s new since the launch of Amazon ECS Anywhere, new features of AWS Fargate, and a look ahead at the exciting enhancements to Amazon ECS.
Amazon Elastic Container Service (ECS) Deployment
This guide offers an overview of Amazon ECS deployment options on AWS and shows how it can be used to manage a simple containerized application.
Amazon ECS Workshop
This workshop is designed to educate those that might not be familiar with AWS Fargate, Amazon ECS, and possibly even Docker container workflow.
Deploy Docker Containers on Amazon ECS
Learn how to run a Docker-enabled sample application on an Amazon ECS cluster behind a load balancer, test the sample application, and delete your resources to avoid charges.
-
Amazon EKS
-
Getting started with Amazon EKS
Learn more about Amazon Elastic Kubernetes Service (Amazon EKS), a managed service that you can use to run Kubernetes on AWS without needing to install, operate, and maintain your own Kubernetes control plane or nodes.
Amazon Elastic Kubernetes Service (EKS) deployment
Explore Amazon EKS deployment options on AWS and learn how it can be used to manage a general containerized application.
Amazon EKS Quick Start Reference Deployment
Using a Quick Start reference deployment guide, we provide step-by-step instructions for deploying Amazon Elastic Kubernetes Service (Amazon EKS) clusters.
Deploy a Kubernetes Application
This tutorial shows you how to deploy a containerized application onto a Kubernetes cluster managed by Amazon Elastic Container Service for Kubernetes (Amazon EKS).Amazon EKS workshop
Practical exercises to learn about Amazon Elastic Kubernetes Service.
Visit the workshop »
-
Amazon Lightsail
-
Creating, pushing, and deploying container images
with Amazon Lightsail
This tutorial shows how how to create a container image on your local machine using a Dockerfile. After your image is created, you can then push it to your Lightsail container service to deploy it.
Amazon Lightsail resource center
Explore Lightsail tutorials, videos, and links to core concept documentation.
Launch a Linux Virtual Machine with Amazon Lightsail
In this tutorial, you create an Amazon Linux instance in Amazon Lightsail. After the instance is up and running, you connect to it via SSH within the Lightsail console using the browser-based SSH terminal.
-
AWS App Runner
-
Getting started with AWS App Runner
This tutorial walks you through configuring the source code and deployment, the service build, and the service runtime to deploy your application to the App Runner service. It also shows how to deploy a code version, make a configuration change, and view logs.
Use the tutorial »
AWS App Runner: From code to a scalable, secure web application in minutes
Explore how AWS App Runner was designed to make it easier for you to deploy web apps and APIs to the cloud, regardless of the language they are written in, even for teams that lack prior experience deploying and managing containers or infrastructure.
Deploy a web app using AWS App Runner
Follow these step-by-step instructions to deploy a containerized web app using AWS App Runner. Start with your source code or a container image. App Runner automatically builds and deploys the web application and load balances traffic with encryption. -
AWS Elastic Beanstalk
-
Getting started using Elastic Beanstalk
This guide walks you through creating, exploring, updating, and deleting an Elastic Beanstalk application.Deployment options on AWS Elastic Beanstalk
This guide explains you can use AWS Elastic Beanstalk to deploy, manage, and scale applications without the operational burden of managing infrastructure.
Intermediate AWS Electric Beanstalk tutorials and samples
These tutorials are targeted at intermediate users and may not contain instructions for basic steps such as signing up for AWS.
-
AWS Fargate
-
Getting started with AWS Fargate
This guide explains the basics of AWS Fargate, a technology that you can use with Amazon ECS to run containers without having to manage servers or clusters of Amazon EC2 instances.
Getting started with the console using Linux containers on AWS Fargate
Get started with Amazon ECS on AWS Fargate by using the Fargate launch type for your tasks in the Regions where Amazon ECS supports AWS Fargate.
Creating a cluster with a Fargate Linux task using the AWS CLI
Set up a cluster, register a task definition, run a Linux task, and perform other common scenarios in Amazon ECS with the AWS CLI. -
ROSA
-
Getting started with Red Hat OpenShift Service on AWS
This guide will help you get started using Red Hat OpenShift Service on AWS.
Why would you use ROSA?
This video looks at when you might use Red Hat OpenShift over standard Kubernetes and explores ROSA on AWS in depth.
Explore
Explore reference architecture diagrams for containers on AWS.
Explore whitepapers to help you get started and learn best practices.
Explore vetted solutions and architectural guidance for common use cases for containers.