Create ECS Task Definition

1 Create an ECS Cluster

  1. Navigate to ECS by clicking on the Services menu, under the Compute section.
  2. Click on Create Cluster button.
  3. In the Cluster configuration
    • Cluster name: Enter ai-challenge-ecs-cluster
  4. In the Infrastructure
    • Provisioning model: Select AWS Fargate (serverless)
  5. Click on Create button

Docs Version Dropdown

Wait for 2 minutes for the ECS cluster to be created.

Docs Version Dropdown

2 Create an ECS Task Role

2.1 Create an IAM Role

  1. Navigate to IAM by clicking on the Services menu, under the Security, Identity, & Compliance section.
  2. Click on Roles in the left navigation pane.
  3. Click on Create role button.
  4. In the Select type of trusted entity
    • Select AWS service
    • Choose the service that will use this role: ECS
    • Click on Next: Permissions button
  1. Choose Next to Review page.
  2. In the Review page.
    • Role name: Enter TaskRole
    • Click on Create role button

2.2 Attach Policies to the Role

  1. Click on the TaskRole role.
  2. Click on Add Permission button.
    • Click on Create Inline Policy button.
    • Choose JSON tab.
    • Paste this json in the Policy Document editor.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
            ],
            "Resource": "arn:aws:s3:::ai-challenge-2024/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "logs:CreateLogGroup"
            ],
            "Resource": "*"
        }   
    ]
}

3 Create an ECS Task Definition

  1. Nhấp vào Task Definitions trong thanh điều hướng bên trái.
  2. Nhấp vào nút Create new Task Definition.
    • Chọn Create new task with JSON.
  3. Dán đoạn JSON sau vào trình chỉnh sửa Task Definition:
{
    {
    "containerDefinitions": [
        {
            "name": "keyframes-container",
            "image": "<aws account id>.dkr.ecr.ap-southeast-1.amazonaws.com/ai-challenge-2024:keyframes",
            "cpu": 2048,
            "memory": 6144,
            "portMappings": [
                {
                    "name": "80",
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp",
                    "appProtocol": "http"
                },
                {
                    "name": "433",
                    "containerPort": 433,
                    "hostPort": 433,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "essential": true,
            "environment": [
                {
                    "name": "S3_BUCKET_NAME",
                    "value": "ai-challenge-2024"
                },
                {
                    "name": "S3_FOLDER_NAME",
                    "value": "keyframes"
                },
                {
                    "name": "URL_TO_DOWNLOAD",
                    "value": ""
                }
            ],
            "mountPoints": [],
            "volumesFrom": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/keyframes-task",
                    "mode": "non-blocking",
                    "awslogs-create-group": "true",
                    "max-buffer-size": "25m",
                    "awslogs-region": "ap-southeast-1",
                    "awslogs-stream-prefix": "ecs"
                }
            },
            "systemControls": []
        }
    ],
    "family": "keyframes-task",
    "taskRoleArn": "arn:aws:iam::<aws account id>:role/TaskRole",
    "executionRoleArn": "arn:aws:iam::<aws account id>:role/TaskRole",
    "networkMode": "awsvpc",
    "placementConstraints": [],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "2048",
    "memory": "6144",
    "ephemeralStorage": {
        "sizeInGiB": 21
    },
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    },
    "tags": []
    }
}

Cấu Hình Chính Xác Cách Container Chạy Trong Tác Vụ

Định Nghĩa Container

  • name: keyframes-container – Tên của container.

  • image: <aws account id>.dkr.ecr.ap-southeast-1.amazonaws.com/ai-challenge-2024:keyframes – Docker image được lưu trữ trong Amazon ECR mà container sẽ sử dụng.

  • cpu: 2048 – Phân bổ 2 vCPUs cho container.

  • memory: 6144 – Phân bổ 6 GB bộ nhớ cho container.

  • portMappings:

    • containerPort: 80 – Mở cổng 80 cho lưu lượng HTTP.
    • containerPort: 433 – Mở cổng 433 cho lưu lượng (lưu ý: có thể cần chỉnh sửa thành 443 cho HTTPS).
  • essential: true – Chỉ ra rằng container là quan trọng đối với tác vụ; nếu container này dừng lại, toàn bộ tác vụ sẽ dừng lại.

Biến Môi Trường Biến môi trường được truyền vào container để cấu hình hành vi:

  • S3_BUCKET_NAME: "ai-challenge-2024" – Xác định bucket S3 dùng để lưu trữ keyframes.
  • S3_FOLDER_NAME: "keyframes" – Xác định thư mục trong bucket S3 nơi lưu trữ keyframes.
  • URL_TO_DOWNLOAD: "" – Một placeholder cho URL mà container sẽ sử dụng để tải xuống.

Cấu Hình Logging Thiết lập logging tới AWS CloudWatch Logs để theo dõi và gỡ lỗi:

  • logDriver: awslogs – Sử dụng driver AWS Logs để gửi logs tới CloudWatch.
  • awslogs-group: /ecs/keyframes-task – Xác định nhóm CloudWatch Logs nơi lưu trữ logs.
  • awslogs-create-group: true – Tự động tạo nhóm log nếu nó chưa tồn tại.
  • max-buffer-size: 25m – Xác định kích thước bộ đệm tối đa cho logs.
  • awslogs-region: ap-southeast-1 – Đặt khu vực AWS cho logging.
  • awslogs-stream-prefix: ecs – Thêm một tiền tố vào các luồng log để giúp nhận diện chúng dễ dàng.

Cài Đặt Tác Vụ

  • family: "keyframes-task" – Tên gia đình của tác vụ, được sử dụng để xác định nó trong ECS.
  • taskRoleArn: arn:aws:iam::<aws account id>:role/TaskRole – Xác định vai trò IAM mà tác vụ sử dụng để có quyền truy cập các dịch vụ AWS.
  • executionRoleArn: arn:aws:iam::<aws account id>:role/TaskRole – Xác định vai trò IAM được sử dụng bởi tác nhân ECS để kéo images và xuất bản logs.

Cấu Hình Mạng

  • networkMode: awsvpc – Sử dụng chế độ mạng AWS VPC, cho phép tác vụ có các giao diện mạng, nhóm bảo mật và giao diện mạng đàn hồi riêng.
  • requiresCompatibilities: ["FARGATE"] – Xác định rằng tác vụ yêu cầu loại khởi chạy Fargate.

Cấu Hình Tài Nguyên

  • cpu: "2048" – Phân bổ 2 vCPUs cho tác vụ.
  • memory: "6144" – Phân bổ 6 GB bộ nhớ cho tác vụ.
  • ephemeralStorage:
    • sizeInGiB: 21 – Cung cấp 21 GB lưu trữ tạm thời cho dữ liệu tạm thời do tác vụ tạo ra.

Cấu Hình Nền Tảng

  • runtimePlatform:
    • cpuArchitecture: X86_64 – Xác định kiến trúc CPU.
    • operatingSystemFamily: LINUX – Xác định hệ điều hành được sử dụng.

Định nghĩa tác vụ này đảm bảo một môi trường linh hoạt, mở rộng và an toàn để xử lý keyframes trong AWS ECS sử dụng loại khởi chạy Fargate, cho phép bạn chạy các container một cách hiệu quả mà không cần quản lý máy chủ.