Giới thiệu

Tổng quan

Amazon Elastic Container Service (ECS)

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.

ECS Lab

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 và AWS Management Console.

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ớ.

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.

Task Definition

Đây là một text file (json format). Nó sẽ mô tả 1 hoặc nhiều container (tối đa là 10) để hình thành nên ứng dụng của bạn. Task definition sẽ chỉ ra một vài parameter cho ứng dụng, ví dụ như container nào sẽ được dùng, image được sử dụng, launch type sử dụng, cấu hình của container (CPU và bộ nhớ)), port đang mở và data volume gì sẽ được tạo với container trong các task…

Parameter trong task definition phụ thuộc vào launch type nào đang được sử dụng. Ví dụ sau đây:

{
   "containerDefinitions": [ 
      { 
         "command": [
            "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""
         ],
         "entryPoint": [
            "sh",
            "-c"
         ],
         "essential": true,
         "image": "httpd:2.4",
         "logConfiguration": { 
            "logDriver": "awslogs",
            "options": { 
               "awslogs-group" : "/ecs/fargate-task-definition",
               "awslogs-region": "us-east-1",
               "awslogs-stream-prefix": "ecs"
            }
         },
         "name": "sample-fargate-app",
         "portMappings": [ 
            { 
               "containerPort": 80,
               "hostPort": 80,
               "protocol": "tcp"
            }
         ]
      }
   ],
   "cpu": "256",
   "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole",
   "family": "fargate-task-definition",
   "memory": "512",
   "networkMode": "awsvpc",
   "runtimePlatform": {
        "operatingSystemFamily": "LINUX"
    },
   "requiresCompatibilities": [ 
       "FARGATE" 
    ]
}

Task và Schedule

Một task là việc khởi tạo một task definition bên trong cluster. Nhiều Task khác nhau có thể được tạo bởi một Task Definition, tùy theo nhu cầu, nhưng chỉ định một số lượng task nhất định. Tuy nhiên, các task này có thể giống nhau.

ECS Lab

Với mỗi một task sử dụng Fargate launch type có một ranh giới riêng biệt và không chia sẻ kernel, tài nguyên cpu, bộ nhớ, hay elastic network interface với task khác.

Amazon ECS task scheduler chịu trách nhiệm cho việc thay thế các task bên trong cluster. Có một vài cách khác nhau để lên schedule cho task.

  • Service schedule

  • Manually running task

  • Running task on a cron-like schedule

  • Custom scheduler

ECS Lab

Service

Xác định mức tối thiểu và tối đa của một hoặc nhiều Task từ một Task Definition chạy tại bất kỳ thời điểm nhất định nào. Đây là tính năng scale và cân bằng tải. Bây giờ khi đã có Service, các Task của Service cần phải được chạy ở đâu đó để có thể truy cập được. Nó cần được đặt trên một Cluster và dịch vụ quản lý container sẽ xử lý nó khi chạy trên một hoặc nhiều ECS Container Instance(s).

Amazon ECS Container Instances và Amazon ECS Container Agents

Một ECS Container Instance có thể chạy nhiều Task giống hoặc khác nhau, từ cùng hoặc khác Services. Agent được sử dụng để hỗ trợ kết nối trao đổi giữa ECS và các instance, cung cấp thông tin về các container đang chạy và quản lý các container mới tạo…

Cluster

Cluster là một nhóm các ECS Container Instance. Amazon ECS xử lý logic của việc lập lịch, duy trì và xử lý các yêu cầu mở rộng quy mô cho các instance này. Các task chạy trên ECS luôn nằm trong cluster.

Khi các Task được chạy trên Fargate, tài nguyên của cluster sẽ được quản lý bởi Fargate. Khi sử dụng EC2 launch type thì các cluster là những group ECS Container Instance (được chạy bằng các EC2 instance).

ECS Lab

Amazon ECS tải các container image của bạn từ registry mà bạn đã setting trước đó sau đó sẽ run những images này trong cluster của bạn:

  • Cluster là Region-specific.

  • Cluster có thể chứa nhiều tasks sử dụng cả Fargate launch type và EC2 launch type.

  • Khi các task sử dụng EC2 launch type , các clusters có thể chứa nhiều ECS Container Instance khác nhau. Tại cùng một thời điểm, một ECS Container Instance chỉ thuộc về duy nhất một cluster.

  • Bạn có thể tạo một custom IAM policy cho cluster cho phép hoặc giới hạn user access tới clusters.

ECS Lab