AWS Associate Developer: ECS, ECR & Fargate Docker in AWS

Mối Quan Hệ Giữa ECS, Docker và ECR

Amazon ECS (Elastic Container Service)

Amazon ECS là một dịch vụ triển khai và quản lý container có khả năng mở rộng cao, cho phép bạn chạy các ứng dụng được đóng gói trong các container.

Amazon ECR (Elastic Container Registry)

Amazon ECR là dịch vụ lưu trữ Docker images được quản lý hoàn toàn bởi AWS, tích hợp chặt chẽ với ECS. Chúng ta có thể sử dụng ECR để lưu trữ, quản lý và triển khai Docker images một cách an toàn và hiệu quả.

Các Thành Phần Cơ Bản của Amazon ECS

  • Task Definition: Là một mẫu (template) dưới dạng tệp JSON, mô tả cách chạy một hoặc nhiều container dưới dạng một đơn vị. Nó bao gồm thông tin về Docker images, tài nguyên CPU và bộ nhớ cần thiết, cổng mạng, biến môi trường và các thiết lập khác.
  • Task : Là một phiên bản chạy của Task Definition. Mỗi task đại diện cho một hoặc nhiều container đang chạy.
  • Service: Quản lý và duy trì số lượng task mong muốn trong cluster. Service đảm bảo rằng số lượng task được chỉ định luôn chạy và có khả năng tự phục hồi khi task bị lỗi.

Docker Containers và Amazon ECS
Docker là công nghệ container hóa cho phép bạn đóng gói và phân phối các ứng dụng của mình trong một môi trường độc lập.
Trong ECS, các Docker containers được gọi là "tasks" và chúng được nhóm lại trong các "clusters".
Do đó, chạy Docker container trên AWS tương đương với việc chạy ECS Tasks trên các ECS Clusters.

Amazon ECS - EC2 Launch Type

Tổng quan về EC2 

Amazon EC2 (Elastic Compute Cloud) là một service của AWS cho phép thuê và chạy các máy chủ ảo/Virtual Machine (gọi là instances). Chúng ta có toàn quyền kiểm soát cấu hình của các máy chủ ảo này: từ chọn hệ điều hành, dung lượng CPU, RAM, mạng, lưu trữ, v.v.

EC2 Launch Type

Với EC2 Launch Type, chúng ta chạy các container trên các EC2 instances mà chúng ta tự quản lý. Điều này đòi hỏi chúng ta phải tự cấu hình, kiểm soát tài nguyên, kích thước và cập nhật cho các instances.

Các điểm chính bao gồm:

  • Quản lý Hạ tầng: Chúng ta cần tự tạo và duy trì các EC2 instances, cung cấp tài nguyên cần thiết cho các ứng dụng container hóa.
  • ECS Agent: Mỗi EC2 instance phải chạy một ECS Agent. Agent này đăng ký instance với ECS Cluster và quản lý tương tác giữa AWS và instance.
  • Quản lý Containers: AWS sẽ tự động xử lý việc khởi động và dừng các containers dựa trên cấu hình của chúng ta trong Task Definition và Service.

Ví dụ Minh Họa

Giả sử bạn cần triển khai một ứng dụng web đơn giản trong Docker container. Các bước cơ bản bao gồm:

  1. Tạo ECS Cluster với EC2 Launch Type:
    • Tạo một ECS Cluster chứa các EC2 instances mà chúng ta quản lý.
  2. Khởi tạo EC2 Instances:
    • Tạo các EC2 instances với cấu hình tùy chỉnh.
    • Cài đặt Docker và ECS Agent (có thể sử dụng Amazon ECS-Optimized AMI để tự động cài đặt).
  3. Định nghĩa Task Definition:
    • Tạo một Task Definition, nơi chúng ta định nghĩa các thông số kỹ thuật của container, như Docker image, cổng mạng, bộ nhớ và CPU cần thiết.
  4. Triển khai Service:
    • Sử dụng Task Definition để tạo một Service trong Cluster.
    • Service sẽ quản lý số lượng task mong muốn và đảm bảo chúng luôn chạy.
  5. Quản lý EC2 Instances:
    • Theo dõi, mở rộng hoặc thu hẹp các EC2 instances để đảm bảo đủ tài nguyên cho các containers.

Ưu điểm của EC2 Launch Type

  • Kiểm Soát Hoàn Toàn: Chúng ta có quyền kiểm soát toàn bộ tài nguyên của EC2 instances, bao gồm cấu hình, kích thước, bảo mật và lưu trữ.
  • Khả Năng Tùy Chỉnh: Có thể cài đặt phần mềm hoặc dịch vụ đặc biệt trên EC2 instances mà các containers có thể cần.
  • Tối Ưu Hóa Chi Phí: Nếu quản lý tốt, chúng ta có thể tối ưu hóa chi phí bằng cách tận dụng các loại EC2 instances phù hợp (ví dụ: sử dụng Spot Instances).

Nhược điểm của EC2 Launch Type

  • Quản Lý Phức Tạp: Phải tự quản lý các bản cập nhật bảo mật, nâng cấp hệ điều hành và tự động hóa việc mở rộng EC2.
  • Chi Phí Không Linh Hoạt: Có thể tốn kém hơn nếu không tối ưu hóa việc sử dụng tài nguyên, vì chúng ta phải trả tiền cho EC2 instances đang chạy ngay cả khi chúng không sử dụng hết tài nguyên.

Amazon ECS - Fargate Launch Type

Với Amazon ECS Fargate Launch Type, chúng có thể triển khai các container Docker mà không cần lo về việc quản lý cơ sở hạ tầng

Amazon ECS Fargate là gì?

AWS Fargate là một compute engine cho Amazon ECS, cho phép chúng ta chạy containers mà không cần phải quản lý servers hay clusters của EC2 instances. 

Fargate loại bỏ nhu cầu phải chọn loại server, quyết định khi nào scale hay tối ưu hóa phân bổ cluster, đơn giản hóa việc triển khai và quản lý ứng dụng, các phần khác liên quan đến hạ tầng sẽ được AWS tự động quản lý

Fargate Launch Type trong ECS là gì?

Với Fargate Launch Type, chúng ta triển khai containers mà không cần quản lý EC2 instances. Chỉ cần định nghĩa yêu cầu về tài nguyên (CPU, RAM) cho các containers, và AWS sẽ lo phần còn lại.

Cách hoạt động của Fargate Launch Type

  1. Tạo ECS Cluster:
    • Tạo một Fargate Cluster không chứa EC2 instances.
  2. Định nghĩa Task Definition:
    • Chỉ rõ Docker image, cấu hình tài nguyên cho mỗi container (CPU, bộ nhớ), IAM roles và cấu hình mạng.
  3. Triển Khai Service:
    • Sử dụng Task Definition để tạo một Service trong Cluster.
    • Fargate sẽ tự động khởi tạo và duy trì các tasks dựa trên cấu hình.
  4. Quản Lý và Monitoring:
    • Sử dụng AWS CloudWatch để theo dõi logs và performance của containers.
    • AWS cung cấp các công cụ để giám sát sức khỏe và tình trạng của tasks.

Ưu điểm của Fargate Launch Type

  • Không Cần Quản Lý Cơ Sở Hạ Tầng: Chúng ta không cần lo về việc quản lý EC2 instances hay cấu hình chúng; AWS quản lý phần này cho chúng ta.
  • Serverless: Fargate cung cấp một môi trường hoàn toàn serverless cho việc triển khai container, giúp chúng ta tập trung vào thiết kế và xây dựng ứng dụng.
  • Scaling Dễ Dàng: Chỉ cần tăng hoặc giảm số lượng tasks; Fargate tự động quản lý tài nguyên cần thiết.
  • Thanh Toán Linh Hoạt: Chỉ phải trả tiền cho tài nguyên mà containers thực sự sử dụng, giúp tối ưu hóa chi phí.
  • Tích Hợp Chặt Chẽ với VPC: Mỗi task chạy trong môi trường cô lập và có thể được cấu hình với subnet và security group riêng.

Nhược điểm của Fargate Launch Type

  • Ít Kiểm Soát Hơn: Không có quyền truy cập trực tiếp vào cơ sở hạ tầng (như EC2 instances), hạn chế nếu cần tùy chỉnh hoặc tối ưu hóa hiệu suất ở mức hệ thống.
  • Giới Hạn Cấu Hình: Chỉ có thể tùy chỉnh tài nguyên ở mức container, không thể can thiệp vào hệ điều hành hay phần mềm trên máy chủ.
  • Giới Hạn Tính Năng: Một số tính năng không được hỗ trợ so với EC2 Launch Type, như chạy các daemon trên host hoặc sử dụng GPU instances.

So sánh EC2 Launch Type và Fargate Launch Type

Tiêu chí EC2 Launch Type Fargate Launch Type
Quản lý hạ tầng Tự quản lý các EC2 instances AWS quản lý hoàn toàn hạ tầng
Tính linh hoạt Tùy chỉnh và kiểm soát hạ tầng theo ý muốn Tự động, không cần quan tâm đến hạ tầng
Scaling Tự động mở rộng hoặc thu hẹp các EC2 instances Fargate tự động mở rộng/thu hẹp theo nhu cầu
Chi phí Có thể rẻ hơn nếu quản lý tốt các EC2 instances Thanh toán linh hoạt theo tài nguyên container
Tùy chỉnh OS Được phép Không được phép
Use case Khi cần kiểm soát chặt chẽ về tài nguyên và hạ tầng Khi cần chạy container nhanh chóng, không phải lo về hạ tầng

Khi nào chọn EC2 Launch Type và khi nào chọn Fargate Launch Type?

Chọn EC2 Launch Type Khi:

  • Cần quyền kiểm soát hoàn toàn về tài nguyên và môi trường hạ tầng.
  • Muốn tối ưu hóa chi phí bằng cách tận dụng các loại EC2 instances phù hợp (ví dụ: sử dụng Spot Instances để giảm chi phí).
  • Cần cài đặt các phần mềm hoặc dịch vụ đặc biệt trên các EC2 instances.
  • Có hệ thống monitoring và tự động mở rộng (scaling) tốt để quản lý tải.

Chọn Fargate Launch Type khi:

  • Muốn tập trung hoàn toàn vào phát triển ứng dụng và không muốn mất thời gian quản lý hạ tầng.
  • Cần khả năng mở rộng tự động mà không phải lo lắng về việc cấu hình tài nguyên.
  • Có khối lượng công việc không đều, cần mô hình thanh toán linh hoạt dựa trên tài nguyên thực tế sử dụng.
  • Cần triển khai nhanh chóng mà không cần phải cấu hình máy chủ ảo.

Comments