Skip to content

Commit

Permalink
Merge pull request #6 from FCJ-DNTU/1-introduce
Browse files Browse the repository at this point in the history
update introduce
  • Loading branch information
NguyenAnhTuan1912 authored Oct 18, 2024
2 parents 0c92422 + 44c1fd3 commit 6fd4210
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 34 deletions.
58 changes: 41 additions & 17 deletions content/1-introduction/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,51 @@ pre = "<b>1. </b>"

![1](/images/.png)

### Introduction to Deploying Applications on Amazon Elastic Container Service (ECS)
#### Amazon Elastic Container Service (ECS)

After completing the setup of Docker images, containers, and RDS in the previous steps, we will now move forward by deploying our application on **Amazon Elastic Container Service (ECS)** — a powerful AWS service that allows you to deploy and manage containerized applications at scale.
**Amazon Elastic Container Service (Amazon ECS)**, as defined by AWS, is a highly scalable container management service that makes it easy to run, stop, or manage Docker containers within a cluster. You can host a serverless infrastructure by running services or tasks using the Fargate launch type, or use the EC2 launch type to run EC2 instances. Amazon ECS is often compared to Kubernetes, Docker Swarm, and Azure Container Instances.

Amazon ECS automates container management, including creating, maintaining, and scaling tasks and services, while seamlessly integrating with other AWS services such as **Amazon RDS** for databases, **Elastic Load Balancer** for load balancing, and **VPC** for networking. In this section, we will:
Amazon ECS runs containers in a cluster composed of multiple Amazon EC2 instances with Docker pre-installed. This service handles container installation, scaling, monitoring, and managing these instances (launch/stop) through both APIs and the AWS Management Console.

- **Create an ECS Cluster** to host your containers.
- **Define tasks** for the applications packaged as Docker images.
- **Deploy services** on ECS to ensure scalability and high availability.
- **Connect ECS to RDS** so the application can securely and efficiently access the database.
Amazon ECS simplifies the view of EC2 instances into a pool of resources, such as CPU and memory.

With ECS, you can leverage features like **Auto Scaling** to ensure your application is always ready to handle increased traffic without worrying about managing the infrastructure.
You can use Amazon ECS to deploy containers through clusters, depending on the resources you need, independent policies, or flexibility. With Amazon ECS, you don’t need to operate your own configuration and cluster management system or worry about scaling your infrastructure management.

#### Process Description
Amazon ECS is a regional service that simplifies running container applications across multiple Availability Zones (AZs) in the same region. You can create an ECS cluster inside a new or existing Virtual Private Cloud (VPC). Once a cluster is created and running, you can define tasks and services, specifying which Docker container images will run through the clusters.

Initially, I will reconfigure the infrastructure from task 15. Then proceed to configure additional resources such as **private subnet**, **NAT gateway**, and **security group**. Once the infrastructure is stable, the next step is to prepare for deployment, including the following steps (as seen in the task):
#### Amazon ECS Task definitions

1. **Build image** and then push it to both **ECR** and **Dockerhub**.
2. Pre-register a namespace in **CloudMap**.
3. Create an **ECS Cluster**.
4. Create **task definitions** for both **Frontend** and **Backend** (starting with backend, then frontend), both of which include environment variables.
5. Create an **ALB**, including a **target group** for the **Frontend service**.
6. Create an **ECS Service**, starting with the **backend** first, then the **frontend**.
7. Verify the result.
In Amazon ECS, **Task definitions** are created to define pre-launch configuration settings for Docker containers in Amazon ECS. The configurations that can be defined in a task definition include:

- Docker image to use.
- The amount of CPU and memory used in the task or each container within the task.
- Launch type (specifying the infrastructure to run).
- Networking mode for the containers.
- Log configuration for the task.
- How to handle task execution.
- Commands to run when the task starts.
- Volume definitions.
- IAM roles used to run the task.

#### Amazon ECS Services

In Amazon ECS, **Service** is a configuration that allows one or more tasks to be run continuously in a cluster and automatically maintained. Tasks and services can be run on serverless infrastructure managed by AWS Fargate or on user-managed infrastructure such as EC2 clusters.

#### Amazon ECS Cluster

An **Amazon ECS Cluster** is a resource management unit used to deploy containers in AWS ECS. When you fully define task definitions and services for an ECS Cluster, the cluster creates the necessary resources to deploy containers. An ECS cluster is a group (or a single) of virtual machines hosting containers.

#### Cluster Scaling và Service Scaling

In ECS, a **Cluster** is a group of resources (EC2 instances or Fargate) used to run containers. Cluster Scaling is the process of increasing or decreasing the number of resources in the cluster based on workload demands. This can be done manually or automatically using Auto Scaling. With Auto Scaling, the cluster automatically adds or removes instances based on task count, CPU usage, or RAM, optimizing resources.

**Service Scaling** in ECS refers to adjusting the number of tasks (containers) a service is running. ECS supports Auto Scaling for services based on specific rules, such as CPU or memory usage, request count, or other metrics collected by Amazon CloudWatch.

#### Rolling và Blue/Green Deployment

**Rolling Deployment** is a method for gradually updating the containers of a service, meaning that new versions of the container are rolled out slowly to replace the old versions. ECS will stop running the old containers and gradually create new ones, ensuring enough resources are available and that the service is not interrupted. Rolling deployment is a safe deployment strategy, minimizing downtime, but it may take more time if many containers are involved.

**Blue/Green Deployment** is another deployment strategy in ECS that reduces risks when updating software. In this method:

- **Blue** is the current version of the running application.
- **Green** is the new version of the application, deployed in parallel with Blue. Once Green is ready and successfully tested, traffic is shifted from Blue to Green via a Load Balancer. If any issues arise with Green, traffic can be reverted back to Blue without downtime. AWS CodeDeploy and Application Load Balancer are commonly used to support Blue/Green deployment strategies.
58 changes: 41 additions & 17 deletions content/1-introduction/_index.vi.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,52 @@ pre = "<b>1. </b>"

![1](/images/.png)

#### Giới thiệu về Triển khai Ứng dụng lên Amazon Elastic Container Service (ECS)
#### Amazon Elastic Container Service (ECS)

Sau khi đã hoàn tất việc thiết lập Docker image, container và RDS trong các bước trước ( [Deploy Application on Docker Container](https://fcj-dntu.github.io/000015-deploy-app-docker) ) , chúng ta sẽ tiếp tục đưa ứng dụng của mình lên **Amazon Elastic Container Service (ECS)** một dịch vụ mạnh mẽ của AWS cho phép triển khai và quản lý các ứng dụng containerized trên quy mô lớn.
**Amazon Elastic Container Service (Amazon ECS)**, theo định nghĩa của AWS là một dịch vụ quản lý container có khả năng mở rộng cao, dễ dàng run, stop, hay quản lý docker container ở trong một cluster. Bạn có thể host một serverless infrastructure bằng cách chạy service hay task sử dụng Fargate launch type hoặc sử dụng EC2 launch type để chạy các EC2 instance. Amazon ECS được so sánh với Kubernetes, Docker Swarm và Azure Container Instances.

Amazon ECS giúp tự động hóa việc quản lý container, bao gồm việc tạo, duy trì và scale các task và services, đồng thời tích hợp dễ dàng với các dịch vụ AWS khác như **Amazon RDS** cho cơ sở dữ liệu, **Elastic Load Balancer** cho cân bằng tải, **VPC** cho mạng. Trong phần này, chúng ta sẽ:
Amazon ECS chạy các containers trong cluster gồm nhiều Amazon EC2 instance được cài sẵn Docker. Dịch vụ này xử lý việc cài đặt container, mở rộng quy mô, giám sát và quản lý những instance này (launch/stop) thông qua cả API AWS Management Console.

- **Tạo một ECS Cluster** để chứa các container.
- **Định nghĩa task** cho các ứng dụng đã được đóng gói dưới dạng Docker image.
- **Triển khai các dịch vụ** lên ECS, đảm bảo sự mở rộng và tính sẵn sàng cao.
- **Kết nối ECS với RDS** để ứng dụng có thể truy cập cơ sở dữ liệu một cách an toàn và hiệu quả.
Amazon Elastic Container Service cho phép đơn giản hóa chế độ xem các EC2 instance thành một pool tài nguyên, chẳng hạn như CPU và bộ nhớ.

Với ECS, bạn có thể tận dụng các tính năng tự động hóa như **Auto Scaling** để đảm bảo ứng dụng của bạn luôn sẵn sàng phục vụ khi có lưu lượng tăng cao mà không cần lo lắng về việc quản lý hạ tầng.
Bạn có thể sử dụng Amazon ECS để cài đặt container thông qua cluster và dựa vào nguồn tài nguyên mà bạn cần, chính sách độc lập hay khả năng thay đổi. Với Amazon ECS, bạn không phải vận hành hệ thống quản lý cấu hình và quản lý cụm của riêng mình hoặc lo lắng về việc mở rộng cơ sở hạ tầng quản lý của mình.

Amazon ECS là một dịch vụ theo region, nó đơn giản hoá việc chạy ứng dụng containers trên nhiều AZ trong cùng một Region. Bạn có thể tạo một ECS cluster bên trong một VPC mới hoặc cũ. Sau khi một cluster được khởi tạo và chạy, bạn có thể định nghĩa các task và services mà nó chỉ định Docker container image sẽ chạy thông qua clusters.

#### Mô tả tiến trình
#### Amazon ECS Task definitions

Ban đầu là là mình sẽ configure lại hạ tầng của bài 15. Sau đó là tiền hành config thêm một số resource như **subnet** (private), **nat gateway** **security group**. Sau khi đã ổn định về hạ tầng thì là lúc chuẩn bị cho triển khai, bao gồm các bước (như đã thấy ở trong bài):
Trong Amazon ECS, **Task definitions** được tạo ra để xác định thông số thiết lập trước khi khởi chạy các Docker container trong Amazon ECS. Các thông số có thể được thiết lập trong task definition là:

1. **Build image**, sau đó là đẩy lên **ECR****Dockerhub**.
2. Đăng kí trước một namespace trong **CloudMap**.
3. Tạo **ECS Cluster**.
4. Tạo **task definition** cho **Frontend** lẫn **backend** (backend trước, frontend sau), cả 2 thằng này đều có biến môi trường.
5. Tạo **ALB**, gồm **target group** cho **Frontend service**.
6. Tạo **ECS Service**, đầu tiên là cho **backend** trước, sau đó là tới **frontend**.
7. Kiểm tra kết quả.
- Docker image được sử dụng.
- Lượng CPU và memory được sử dụng trong task hay mỗi container trong task đó.
- Cách thức khởi chạy (Xác định hạ tầng sẽ chạy)
- Phương thức kết nối mạng cho các container.
- Cấu hình log cho task.
- Các hướng xử lý khi chạy task.
- Các lệnh sẽ thực thi khi khởi chạy task.
- Xác định các volume sẽ sử dụng.
- IAM role được sử dụng để thực thi task.

#### Amazon ECS Services

Trong Amazon ECS, **Service** là một cấu hình cho phép chạy một hoặc nhiều các task liên tiếp nhau trong cluster và tự động duy trì chúng. Các task và các dịch vụ có thể được chạy trên các hạ tầng serverless (quản lý bởi AWS Fargate) hoặc thông quan hạ tầng do bạn quản lý như EC2 cluster.

#### Amazon ECS Cluster

Một **Amazon ECS Cluster** là một đơn vị quản lý tài nguyên sử dụng để triển khai container trong AWS ECS. Khi bạn định nghĩa đầy đủ task definitions và services cho ECS Cluster, ECS Cluster sẽ tạo tài nguyên cần thiết để triển khai container.
Một ECS cluster là một nhóm (hoặc một) máy ảo chứa các container.

#### Cluster Scaling và Service Scaling

Trong ECS, một **Cluster** là một nhóm các tài nguyên (instance EC2 hoặc Fargate) được sử dụng để chạy các container. Cluster Scaling là quá trình tăng hoặc giảm số lượng tài nguyên trong cluster dựa trên yêu cầu của workload. Điều này có thể được thực hiện thủ công hoặc tự động bằng cách sử dụng Auto Scaling. Với Auto Scaling, cluster sẽ tự động thêm hoặc xóa các instance dựa trên số lượng task, sử dụng CPU, hoặc RAM, giúp tối ưu hóa tài nguyên.

**Service Scaling** trong ECS là việc điều chỉnh số lượng task (container) mà một service đang chạy. ECS hỗ trợ Auto Scaling cho service dựa trên các quy tắc cụ thể, chẳng hạn như mức sử dụng CPU hoặc Memory, số lượng request đến, hoặc các chỉ số khác được thu thập bởi Amazon CloudWatch.

#### Rolling và Blue/Green Deployment

**Rolling Deployment** là phương pháp cập nhật container của một service từng bước, nghĩa là các phiên bản mới của container sẽ được triển khai dần dần để thay thế các phiên bản cũ. ECS sẽ ngừng chạy các container cũ và tạo các container mới từ từ, đảm bảo có đủ tài nguyên và không gây gián đoạn dịch vụ. Rolling Deployment là cách triển khai an toàn, giúp giảm thiểu downtime, tuy nhiên có thể tốn nhiều thời gian hơn nếu có nhiều container.

**Blue/Green Deployment** là một chiến lược triển khai khác trong ECS, giúp giảm thiểu rủi ro khi cập nhật phần mềm. Trong phương pháp này:

- **Blue** là phiên bản hiện tại của ứng dụng đang chạy.
- **Green** là phiên bản mới của ứng dụng được triển khai song song với phiên bản Blue. Sau khi Green đã sẵn sàng và kiểm tra thành công, traffic sẽ được chuyển từ phiên bản Blue sang Green, thông qua Load Balancer. Nếu có bất kỳ vấn đề nào xảy ra với Green, traffic có thể được chuyển lại về Blue mà không có downtime. AWS CodeDeploy và Application Load Balancer thường được sử dụng để hỗ trợ Blue/Green Deployment.

0 comments on commit 6fd4210

Please sign in to comment.