Amazon Elastic Container Service

Elastic Container Service (ECS) dịch vụ quản lý và triển khai các ứng dụng trong các container trên nền tảng đám mây của Amazon Web Services (AWS). Đây là một dịch vụ giúp cho việc triển khai ứng dụng trở nên dễ dàng hơn bằng cách cho phép người dùng tạo và quản lý các container trong một môi trường đám mây.

ECS cho phép người dùng triển khai các container một cách linh hoạt, có thể tự động điều chỉnh số lượng container để đáp ứng nhu cầu sử dụng của ứng dụng. Bên cạnh đó, ECS còn hỗ trợ tính năng load balancing, giúp phân phối tải cho các container một cách hiệu quả, đảm bảo sự ổn định và hiệu suất cao cho ứng dụng.

Ngoài ra, ECS còn tích hợp với nhiều dịch vụ khác của AWS, chẳng hạn như Amazon Elastic Load Balancing (ELB), Amazon Virtual Private Cloud (VPC), Amazon CloudWatch, và Amazon Identity and Access Management (IAM), giúp người dùng dễ dàng tích hợp và quản lý các tài nguyên của mình trên nền tảng đám mây của AWS.

Một số key feature

  • Serverless với AWS Fargate
  • Fully managed container orchestration
  • Docker support
  • Window container support
  • ELB support (ALB, NLB)
  • ECS Anywhere (Run container bằng On-Premise)
  • EFS để link EC2 Launch Type + Fargate
  • S3 không thể mount làm file system

EC2 Launch Type

  • You explicitly provision EC2 instances
  • You’re responsible for managing EC2 instances
  • Charged per running EC2 instance
  • Docker volumes, EFS, and FSx for Windows File Server
  • You handle cluster optimization
  • More granular control over infrastructure
  • Trường hợp chỉ định mapping port giữa container và instance EC2 thì chỉ có thể run 1 task với 1 task definetion (nếu không chỉ định instance port thì có thể nhiều hơn 1, và network mode phải là bridge hoặc VPC)

Fargate Launch Type

  • Fargate automatically provisions resources
  • Fargate provisions and manages compute
  • Charged for running tasks
  • EFS integration
  • Fargate handles cluster optimization
  • Limited control, infrastructure is automated
  • Fargate automatically provisions resources

Task Definetion

  • Có thể define tối đa 10 container trong 1 task definetion

Dynamic Host Port Mapping

Khi run ECS với Launch Type = EC2 mà muốn sử ALB thì cần thêm role cho phép connect từ ALB tới bất kỳ port trên EC2.

Environment Variables

  • Có thể Hardcode
  • Có thể load từ S3 (bulk)
  • Load từ SSM Parameter Store
  • Load từ Secret Manager

Data Volumes

  • Share data giữa các container do có thể có nhiều container trong 1 task definetion
  • Hoạt động với cả Fargate và EC2
  • Có thể mount từ EFS
  • Fargate có thể define từ 20-200GiB

Task Placements

Chỉ hoạt động với EC2 Launch Type, xác định EC2 nào sẽ run task hoặc terminate.

Placement Strategies

  • Random
  • Binpack
    • Run task ở instance có số CPU hoặc RAM available ít nhất (giảm thiểu số instance in use)
  • Spread
    • Run task ở các instance khác nhau tuỳ theo tiêu chí đã chọn, như AZ, instanceID

Có thể kết hợp các strategy khác nhau

Placement Constraints

  • distinctInstance: Task run trên các Instance khác nhau
  • memberOf: task run trên các instance thoả mãn expression, sử dụng Cluster Query Language

Khi run task mới, ECS sẽ chọn instance thoả mãn tiêu chí theo thứ tự sau

  1. CPU, Memory, port trong task definetion
  2. Task Placement constraint
  3. Best Task Placement Strategies

ECS and IAM Roles

  • Instance Role: Role được attach vào EC2 khi run với ECS
  • Task Role: Role được gắn với Task (Fargate chỉ có Task Role)

Warning: Instance Role cũng được sử dụng khi run Task. Trường hợp cần define permission chi tiết hơn, nên sử dụng Task Role.

Có thể chỉ định Role trong Task Definetion hoặc API Run task.

Scaling ECS

ECS Service Auto Scaling (task level) ≠ EC2 Auto Scaling (EC2 instance level), Support target tracking, step tracking và scheduled scaling policy

ECS Fargate có những Policy Scaling sau

  • ECS Service Average CPU Utilization
  • ECS Service Average Memory Utilization – Scale on RAM
  • ALB Request Count Per Target – metric coming from the ALB

Đối với EC2 Launch Type, có thể Scale dựa theo Auto Scaling Group (VD như theo CPUUtilization), hoặc dựa theo ECS Cluster Capacity Provider (tự động điều chỉnh số lượng EC2 cho đủ CPU/RAM khi thiếu)

Rolling Update

  • Minimum: % số task healthy tối thiểu trong suốt quá trình update
  • Maximum: % số task healthy tối đa trong quá trình update

Ví dụ như dưới, tổng 4 task, ecs terminate 2 task, còn 50% healthy, run 2 task mới do max 100%, sau đó terminate 2 task cũ còn lại, healthy vẫn là 50%, do 2 task mới healthy, sau đó run nốt 2 task mới còn lại cho đủ 4 task như ban đầu.

ECS with ALB

Amazon ECR

Là Docker hub của AWS, có cả public và private, tích hợp IAM, versioning, tag, image lifecycle, vulnerability scanning…

  • Support Lifecycle Policies
    • Tự động xoá image không sử dụng hoặc dựa theo thời gian tạo cách ngày hiện tại hoặc số lượng image muốn giữ lại
    • Mỗi policy chứa nhiều rule
    • Tất cả các rule được tính toán cùng nhau, nhưng apply dựa theo ưu tiên
    • Image sẽ được tự động xoá trong 24h nếu thoả mãn tiêu chí

AWS CoPilot

Là CLI giống SAM,nhưng dùng để tạo tất cả các resource cần thiết để deploy ECS, Fargate, AppRunner, bao gồm như ECS, VPC, ELB, ECR… Có thể sử dụng cùng CodePipepline, có thể deploy lên nhiều env, check log, health status, troubleshooting…

Để sử dụng cần define architecture application bằng CLI hoặc file YAML

Bài viết này được đăng trong AWS, DOP-C02 và được gắn thẻ .

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *