Introduction to AWS Cloud Services: ECR and ECS

As more businesses adopt containerized applications, managing Docker images and running scalable workloads in the cloud becomes essential. Amazon Elastic Container Registry (ECR) and Amazon Elastic Container Service (ECS) provide powerful tools for developers to store and deploy containers quickly and securely on AWS infrastructure. When combined with AWS Fargate, a serverless computing engine, developers can focus on building applications without worrying about managing servers.

In this guide, we’ll walk through deploying a containerized app using ECR to store Docker images and ECS with Fargate to run and scale your app.

Amazon Elastic Container Registry (ECR): Storing and Managing Docker Images

ECR allows developers to store, share, and manage Docker container images securely. You can push images to ECR, pull them for deployment, and manage versions. ECR integrates seamlessly with IAM (Identity and Access Management) for managing permissions, ensuring only authorized users can access or modify container images.

Amazon Elastic Container Service (ECS): Running and Scaling Containerized Applications

ECS is a highly scalable container orchestration service that helps you run, manage, and scale containerized applications across Amazon EC2 instances or Fargate task clusters. With ECS, you define your infrastructure in a task definition, specifying which Docker images to use and how to run your containers.

Benefits of AWS Fargate: Serverless Deployment for Cost-Efficiency

AWS Fargate provides a serverless way to run containers, allowing developers to focus purely on the application rather than managing the underlying infrastructure. Fargate automatically provisions the necessary compute resources, making it a cost-effective and efficient solution for running containers at scale.

Setting Up the EC2 Instance

Creating an EC2 Instance: Node-Todo-App

We’ll create an EC2 instance as our local environment for preparing and pushing Docker images.

  1. Log in to the AWS Management Console and navigate to EC2.
  2. Create a new EC2 instance using an appropriate AMI (Amazon Linux 2) and configure the instance details (e.g., t2.micro for cost-efficiency).
  3. After launching the instance, connect via SSH.

Installing Docker and AWS CLI

Once connected to your EC2 instance:

sudo yum update -y

sudo yum install docker -y

sudo systemctl start docker

sudo usermod -aG docker ec2-user

Next, install the AWS CLI:

sudo yum install aws-cli -y

aws configure

Configure your AWS CLI with appropriate credentials (access key, secret key, region).

Configuring AWS ECR and Pushing the Image

Creating a Public ECR Repository

In the AWS Management Console:

  1. Navigate to ECR and create a public repository.
  2. Name it appropriately (e.g., node-todo-app) and set the visibility for the public.

Resolving AWS Configuration and Permission Errors

Ensure your IAM role attached to the EC2 instance has permission to push and pull images from ECR. Attach the AmazonEC2ContainerRegistryFullAccess policy to your EC2 instance role.

Pushing the Image to ECR

  1. Build your Docker image:

docker build -t node-todo-app .

  1. Tag the image for ECR:

docker tag node-todo-app:latest <aws_account_id>.dkr.ecr.<region>.amazonaws.com/node-todo-app:latest

  1. Authenticate Docker to ECR:

aws ecr get-login-password –region <region> | docker login –username AWS –password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com

  1. Push the image:

docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/node-todo-app:latest

Configuring AWS ECS Cluster and Task Definition

Creating an ECS Cluster with AWS Fargate

In the AWS Console:

  1. Go to ECS and create a new cluster.
  2. Choose Fargate as the launch type and configure the cluster details (e.g., node-todo-app-cluster).

Defining a Task for the Cluster

  1. Create a new task definition under Task Definitions.
  2. Choose Fargate as the launch type and define the container by linking it to your ECR image.
  3. Specify resource allocations (memory, CPU) and environment variables, if necessary.

Configuring Container Details and Port Mapping

  • Set the necessary ports for your container, typically port 80 or 8080 for web apps.
  • Ensure that the port mappings are correctly configured to allow traffic.

Exposing the Application and Accessing It

Navigating the ECS Interface and Network Settings

Once the task definition is set, you can run a service using the task definition in your cluster. Ensure that you configure the VPC and subnet settings correctly to deploy your app.

Configuring Security Groups for Port Access

  • Modify the security group attached to your Fargate service to allow inbound traffic on the necessary port (e.g., 80 for HTTP traffic).
  • You may also need to configure additional firewall rules if required by your app.

Accessing the Deployed Application

Once the application is deployed, navigate to the ECS Console to retrieve the public IP or DNS of your Fargate service. Enter the address in a web browser to access the running app.

Conclusion and Key Takeaways

Recap of the Deployment Process

In this guide, we walked through the step-by-step process of deploying a containerized application using AWS ECS, ECR, and Fargate. Starting from setting up an EC2 instance, installing Docker, pushing an image to ECR, configuring ECS, and finally exposing the app to the world.

Benefits of Using AWS ECS, ECR, and Fargate

AWS’s suite of container services, combined with Fargate’s serverless architecture, offers scalability, ease of management, and cost-efficiency. This approach lets developers focus on building applications, leaving AWS to handle the underlying infrastructure.

Next Steps in AWS Cloud Application Development

Continue exploring AWS services by automating deployments with CI/CD pipelines using tools like AWS CodePipeline, integrating CloudWatch for monitoring, and scaling your app further using AWS’s managed services.

References

Deploy an application to Amazon ECS.

Building, deploying, and operating containerized applications with AWS Fargate