Choosing an AWS Container Service
Taking the first step
Introduction
Containers are a key component to modern app development. They have become a standard way to organize compute resources, as well as 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. So 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're a great way to get started and get building software to deploy in the cloud.
Getting started, however, means making the right choice of AWS container service for your needs. And this guide is aimed at helping you do just that. AWS services covered in this guide include Amazon Elastic Compute Cloud (Amazon EC2), Elastic Container Registry (Amazon ECR), Elastic Container Service (Amazon ECS), Elastic Kubernetes Service (Amazon EKS), Amazon Lightsail, AWS App2Container, AWS Elastic Beanstalk, AWS Fargate, AWS Lambda and Red Hat OpenShift Service on AWS (ROSA).
Time to read
20 minutes
Purpose
Help determine which AWS container service is the best fit for your organization.
Audience
Level
Beginner
Last updated
February 14, 2023
Understand
If you're considering a move to containers (or even a move to the cloud for running your existing on-premises containers), it's worth reminding yourself why you're doing it.
It's because containers provide a standard way to package your applications code, configurations and dependencies into a single object or artifact (also known as as a container image, or a Docker image).
Containers are also a key piece of any modern application development strategy. To provide some context for container-related AWS services, here's a view of the modern application computer services landscape (explained more fully in this video).
A few highlighted services include AWS Lambda, a fully managed service offering that lets you simply provide your code, and Lambda runs the code when it is invoked. It is quite commonly used in event-based architectures.
Moving through the rest of the layers in this development stack, you'll see services related to hosting (including AWS Fargate and Amazon EC2) and a service that maintains a registry of your container images (Amazon ECR, a fully managed container registry service).
And at the base of the stack are a range of components and integration services including Amazon EventBridge, AWS Step Functions, and others. A broad range of third party tools are also available to assist with other aspects of modern app development, with just a few highlighted here.
Consider
You need a container solution that aligns to your application requirements or operational preferences. Here are some of the key criteria to consider in making your choice of a container service, as well as supporting tools and services.
-
Managed service and 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 the 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. They 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 one compute environment versus another type.
When building with containers, services such as App Runner are designed to readily support the demands of a given workload type. Workloads using this approach will be easier to build, perform better, or be more cost effective, although it comes at the expense of flexibility.
-
Many customers want to ensure that their applications can run in - and be easily migrated or moved to - a different environment. They want to be able to preserve choice, or run an application both on-premises and in the cloud.
Applications built using some technologies may run more effectively on some compute services than others. Container services are usually a better migration target for legacy applications than Lambda, which will require a change in architecture. -
The skills of your organization are a major factor when deciding on your container-based approach. Whatever 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 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 criteria by which you will be evaluating your container options, you are now 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 the container that is the best fit for your organization and use case.
Container orchestration
Container orchestration services manage when and where your containers run.
Amazon Elastic Container Service (ECS)
Use this fully managed container orchestration service to help deploy, manage, and scale containerized applications.
Amazon Elastic Kubernetes Service
Start, run, and scale Kubernetes applications in the AWS cloud or on-premises.
Compute options
AWS offers a choice of services to run your containers, allowing you to pick the best for your needs.
Services with container support
Build and run secure web applications at scale, without prior container or infrastructure experience.
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.
Containerize and migrate existing applications.
Enterprise-scale container management
Use it when you need enterprise-scale container management.
Connect and coordinate tools for infrastructure provisioning, code deployments, monitoring, and updates.
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.
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
Run containers on your own managed infrastructure.
Amazon EKS Anywhere lets you create and operate Kubernetes clusters on your own infrastructure.
Run the Kubernetes distribution that powers Amazon EKS on the infrastructure of your choice.
Use
Using the criteria and what you’ve learned about what each container service (and the supporting AWS tools and services) is optimized for, you can now dive deeper into how best to use them.
To explore how to use (and learn more about) your choice, we’ve provided two sets of pathways to explore how each of them works, tutorials to guide you in using them and in-depth documentation to really dig in and how a given container service or tool will work for you. The first set of pathways provides in-depth resources to explore Amazon Elastic Compute Cloud (Amazon EC2), Elastic Container Registry (Amazon ECR), Elastic Container Service (Amazon ECS), Elastic Kubernetes Service (Amazon EKS), Amazon Lightsail.
-
Amazon EC2
-
Amazon ECR
-
Amazon ECS
-
Amazon EKS
-
Amazon Lightsail
-
Amazon EC2
-
Getting started with Amazon EC2
Access to the complete set of Amazon EC2 technical documentation, including guides to Linux and Windows instances.
VM Import/Export User Guide
VM Import/Export enables you 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
In this tutorial you will 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
In this guide, we will take 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
This blog post covers key considerations for Amazon ECR architectures that span across AWS accounts and AWS Regions, and shares some architectures related to hypothetical customer use cases.
Getting started with Amazon ECR Public
Start using Amazon ECR public repositories by creating your first public repository and setting your public registry settings in the Amazon ECR console.
Explore the guide »
Create a pipeline with an Amazon ECR source and ECS-to-CodeDeploy deployment
In this tutorial, you 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
From re:Invent 2022 - 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 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.
-
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
Includes 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.
The second set of container service pathways provide in-depth resources to explore AWS App2Container, AWS Elastic Beanstalk, AWS Fargate, AWS Lambda and Red Hat OpenShift Service on AWS (ROSA).
-
AWS Elastic Beanstalk
-
AWS Fargate
-
AWS Lambda
-
ROSA
-
AWS App2Container
-
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. Ensure that you are using the latest version of the AWS CLI. -
AWS Lambda
-
Getting started with AWS Lambda
This guide shows you how to use the Lambda console to create a function, invoke it, and then view logs and metrics.
Run a Serverless "Hello, World!" with AWS Lambda
In this tutorial, you will learn the basics of running code on AWS Lambda without provisioning or managing servers. We will walk through how to create a Hello World Lambda function using the AWS Lambda console.
Creating Lambda container images - AWS Lambda
Create a container image for a Lambda function by using an AWS provided base image or an alternative base image.
-
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.
-
AWS App2Container
-
Getting started with AWS App2Container
This guide covers the initial setup of your containerization environment, starting with prerequisites and initial workflow decisions. It then takes you step-by-step through containerizing a basic application using App2Container.
FAQ for AWS App2Container
Review the frequently-asked questions about AWS App2Container.
Explore
Explore whitepapers to help you get started, learn best practices, and migrate your databases.
Explore vetted solutions and architectural guidance for common use cases for containers.
Additional resources for:
- Developers
- IT Professionals
- Solution Architects
- Professional Development
- Students (requires free registration)
- Startups
- Decision Makers