Link Search Menu Expand Document

Elastic Container Service - いち

Nội dung

  1. Logging & Permission
  2. Cài đặt ECS Fargate
    1. ECS Cluster
    2. Security Group
    3. Load Balancer
    4. Task Definition
    5. Service Tasks

Để triển khai ứng dụng containers trong môi trường AWS, Amazon cung cấp hai dịch vụ chính:

  • Amazon Elastic Container Service (ECS)
  • Amazon Elastic Kubernetes Service (EKS)

Dịch vụ ECS sử dụng Task Definition để khai báo cấu hình và giao tiếp giữa Docker containers. Một Task Definition sử dụng định dạng JSON có thể khai báo tối đa 10 containers cùng những thông tin cấu hình liên quan như: docker ports, data volume, cpu, memory, links etc. Dựa trên thông tin này, các containers sẽ được thực thi và quản lý bởi những đối tượng Tasks hoạt động bên trong một Cluster. Để tăng tính linh hoạt và khả năng mở rộng hoạt động, ECS sử dụng Task Scheduler để quản lý hoạt động của Task trong Cluster. Ví dụ: chúng ta có thể sử dụng một Service để thực thi nhiều đồng thời Tasks, duy trì tính ổn định của hệ thống khi số lượng yêu cầu từ phía client gia tăng.

Theo định nghĩa, Cluster là tập hợp các đối tượng Tasks và Services. ECS cung cấp hai cách thức để xây dựng một Cluster:

  • Dựa trên Amazon Elastic Compute Cloud (EC2): người dùng chủ động định nghĩa các virtual machine - EC2 trong một Cluster để thực thi Tasks. Nói cách khác , cơ sở hạ tầng được xây dựng và quản lý bởi người sử dụng. Cách làm này tương tự như mô hình Swarm Cluster được giới thiệu trong phần thực hành Docker Swarm.

  • Dựa trên Servesless Compute Engine (Fargate): theo cách tiếp cận này, cơ sở hạ tầng được quản lý tự động bởi ECS Fargate. Thay vì phải cấu hình và quản lý các EC2 trực tiếp, người dùng khai báo các thông tin cấu hình của CPU, Memory cho phép Fargate tự động thiết lập cơ sở hạ tầng đáp ứng nhu cầu hoạt động của hệ thống.

ECS Overview Ouput Cluster ECS Overview

Tương tự như những tài nguyên AWS khác, chúng ta có thể triển khai ECS bằng nhiều phương pháp khác nhau: AWS Console, CloudFormation (declarative), CDK (imperative). Trong nội dung của bài viết này, chúng ta sẽ xây dựng ECS Fargate Cluster và cài đặt dịch vụ RemindersManagement trên Cluster này thông qua công cụ AWS Console. Đây là cách làm trực quan và giúp người sử dụng dễ dàng làm quen với những khái niệm trong môi trường AWS. Khi đã hiểu thêm về cấu trúc ECS, chúng ta có thể chuyển sang sử dụng các công cụ khác như CLI, CDK để giúp quá trình triển khai linh hoạt và hiệu quả hơn.

Trong bước thực hành đầu tiên, chúng ta cần thực hiện một số thay đổi liên quan đến cơ chế Logging và Role Permission của ECS Task.


Logging & Permission

  • Trong các bài thực hành ECS, chúng ta muốn dịch vụ RemindersManagement gửi thông tin log đến CloudWatch thông qua awslogs driver thay vì định nghĩa trực tiếp Log Group trong settings file appsettings.json. Cách làm này giúp thông tin log của containers trong một cluster được quản lý một cách tập trung trong cùng một Log Group.

Để làm điều này, chúng ta thay đổi nội dung appsettings.json:

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.Console"
    ],
    "Region": "ap-southeast-2",
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "Console"
      }
    ],
    "Enrich": [
      "FromLogContext"
    ]
  },
  "AllowedHosts": "*"
}
  • Tạo Service Role cho phép ECS Task có thể download Docker Image từ ECR, đồng thời khởi tạo và quản lý Log trên CloudWatch.

Trên màn hình AWS Console, IAM -> Roles, Click Create Role button:

ECS Role Create Ouput Cluster ECS Role Create

Trên màn hình Create Role, lựa chọn Elastic Container Service do trong trường hợp này Permission được áp dụng cho ECS Service Task

ECS Role Service Ouput Cluster ECS Role Trusted Entity

Trong phần Select your user case, lựa chọn Elastic Container Service Task

ECS Role User Case Ouput Cluster ECS Role User Case

Lựa chọn Next: Permissions để chuyển qua màn hình tiếp theo.

  • Danh sách Policies xuất hiện cho phép chúng ta lựa chọn Policy áp dụng cho Permission này. Trong danh sách này, chúng ta lựa chọn 2 policies:
    • CloudWatchFullAccess: quyền tạo và truy cập CloudWatch Logs Group
    • AmazonECSTaskExecutionRolePolicy: truy cập ECR và tạo CloudWatch Log

ECS Role Permissions Ouput Cluster ECS Role Policies Select

Lựa chọn Next: Tags để chuyển qua màn hình tiếp theo.

Bỏ qua thông tin cấu hình trên màn hình Add tags (optional) và lựa chọn Next: Review.

ECS Role Name Tag Ouput Cluster ECS Role Tags

  • Trên màn hình Review, khai báo thông tin cấu hình:
    • Role name*: ECSRemindersMgtTask
    • Role description: Allow ECS tasks to call AWS services on your behalf

ECS Role Review Ouput Cluster ECS Role Review

Click button Create role để tạo Service Role với cấu hình lựa chọn.


Cài đặt ECS Fargate

Sau khi hoàn thành các bước chuẩn bị trong phần Logging & Permission, chúng ta có thể thực hiện các bước sau để triển khai dịch vụ RemindersManagement trong ECS Fargate.

ECS Cluster

  • Trên màn hình AWS Console, Elastic Container Service -> Clusters. Click button Create Cluster:

Clusters Ouput Cluster ECS Cluster Create

  • Màn hình Create Cluster cung cấp các lựa chọn Templates để tạo Cluster, bao gồm:
    • Networking only: ECS Cluster dựa trên Fargate Engine
    • EC2 Linux + Networking: ECS Cluster dựa trên Linux EC2 Container Instances
    • EC2 Windows + Networking: ECS Cluster dựa trên Windows EC2 Containers Instances
  • Trên màn hình Create Cluster, lựa chọn Cluster Template Networking only. Với lựa chọn này, ECS cho phép tự động tạo ra một Cluster với các thành phần VPC và 2 Subnets.

Clusters Select Ouput Cluster ECS Role Template

Click button Next step để chuyển sang bước tiếp theo.

  • Trên màn hình Configure Cluster, khai báo các thông tin sau:
    • Cluster name: friendreminders
    • Networking:
      • Create VPC: Selected
      • CIDR block: 10.0.0.0/16
      • Subnet 1: 10.0.0.0/24
      • Subnet 2: 10.0.1.0/24
    • CloudWatch Container Insights
      • Enable Container Insights: Selected

Clusters Configure Ouput Cluster ECS Cluster VPC and Subnets

Giải thích

Cấu hình VPC với 2 subnets giúp chúng ta có thể phân bố các tài nguyên AWS trong một Cluster trên những AWS Availability Zones khác nhau, từ đó tăng cường tính ổn định trong hoạt động của hệ thống ứng dụng.

Lựa chọn button Create để tạo Cluster.

  • Màn hình Launch Status cho phép hiển thị quá trình tạo Cluster cùng các tài nguyên AWS tương ứng

Clusters Launch Status Ouput Cluster ECS Cluster Status

Sau khi Cluster được tạo ra, click button View Cluster để xác nhận lại kết quả.


Security Group

ECS yêu cầu sử dụng Security Group để kiểm tra lưu lượng dữ liệu ra / vào bên trong Cluster VPC thông qua loại Protocol và giá trị Port.

  • Tạo Security Group thông qua AWS Console, EC2 Dashboard -> Security Group

Clusters SG Ouput Cluster ECS Cluster Security Group

Click Create Security Group để chuyển sang màn hình kế tiếp

  • Trên màn hình Create security group
    • Khai báo cấu hình trong Basic details
      • Security Group Name: EcsVpcSg
      • Description: Security Group for ECS VPC
      • Vpc: Lựa chọn ECS VPC được tạo ra trong bước 1
    • Khai báo cấu hình trong Inbound rulesOutbound rules
      • HTTP + Port 80, Source Anywhere: áp dụng cho ECS Load Balancer
      • Customer TCP + Port 8000, Source Anywhere: áp dụng cho ECS Task

Clusters SG Basic Ouput Security Group Basic Details

Clusters SG In/Out Rule Ouput Security Group Inbound / Outbound Rules

Click button Create security group để tạo Security Group với cấu hình khai báo.

Sau khi Security Group được tạo ra, trình duyệt tự động chuyển sang màn hình cung cấp chi tiết thông tin của Security Group mới:

Clusters SG Result Ouput Cluster ECS Security Group Result


Load Balancer

Trong quá trình thực thi ECS Service có thể kết hợp với Load Balancer để phân tải các yêu cầu từ client đến các Tasks trong Service. Trong phần này, chúng ta sẽ tạo Application Load Balancer để sử dụng khi triển khai Service trong phần tiếp theo.

  • Trên AWS Console, EC2 -> Load Balancers. Click button Create Load Balancer để tạo Load Balancer

Clusters Load Balancer Ouput Cluster ECS Load Balancer Create

  • Trong màn hình Select load balancer type, lựa chọn Application Load Balancer và click button Create

Clusters Load Balancer Types Ouput Cluster ECS Load Balancer Type

  • Trong màn hình Step 1: Configure Load Balancer, cập nhật cấu hình:
    • Basic Configuration
      • Name: remindersmgtlb
      • Scheme: internet-facing
      • IP address type: ipv4
    • Listeners
      • Load Balancer Protocol: HTTP & Port 80
    • Availability Zones:
      • VPC: Lựa chọn ECS Cluster VPC ID
      • Availability Zones: Lựa chọn các giá trị AZ trong VPC

Clusters Load Balancer Configure Ouput Cluster ECS Load Balancer Configure

Click button Next: Configure Security Settings để chuyển sang màn hình cấu hình cho Security Group.

  • Trong màn hình Step 2: Configure Security Settings, hiển thị Warning do chúng ta tạm thời bỏ qua bước thiết lập cấu hình cho giao thức HTTPS

Clusters Load Balancer Warning Ouput Cluster ECS Load Balancer Security Settings

Click button Next: Configure Security Settings để chuyển sang màn hình tiếp theo.

  • Trong màn hình Step 3: Configure Security Groups, áp dụng các lựa chọn:
    • Assign a security group: Select an existing security group
    • Security Group: Lựa chọn EcsVpcSg tạo ra trong bước trước

Clusters Load Balancer Security Group Ouput Cluster ECS Load Balancer Security Group Select

Click button Next: Configure Routing để sang bước tiếp theo.

  • Trong màn hình Step 4: Configure Routing, cập nhật cấu hình:
    • Target group
      • Target group: New target group
      • Name: remindersmgttg
      • Target type: IP
      • Protocol: HTTP
      • Port: 80
    • Health checks
      • Protocol: HTTP
      • Path: /health

Clusters Target Group Ouput Cluster ECS Load Balancer Routing Target

Giải thích

Trong mô hình network của ECS Fargate - awsvpc, hoạt động giao tiếp của một đối tượng Task được thực hiện qua Elastic Network Interface với địa chỉ IP riêng biệt. Do vậy, cấu hình Target type của Load Balancer cần sử dụng lựa chọn IP.

Click button Next: Register Targets để sang màn hình tiếp theo.

  • Trong màn hình Step 5: Register Targets, chúng ta giữ nguyên cấu hình như mặc định do việc liên kết ECS Service và Load Balancer sẽ được thực hiện khi tạo ECS Service trong bước tiếp theo.

Clusters Register Targets Ouput Cluster ECS Load Balancer Register Targets

Click button: Next: Review để chuyển sang màn hình xác nhận thông tin cấu hình.

  • Xác nhận thông tin trong màn hình Step 6: Review và click button Create để tạo Application Load Balancer

Clusters Load Balance Review Ouput Cluster Load Balancer Review

Clusters Register Targets Final Result Ouput Security Group Creation Status


Task Definition

  • Sử dụng AWS Console, Elastic Container Service, lựa chọn Task Definitions để khai báo Task mới.

  • Trên màn hình Task Definitions, click button Create new Task Definition để chuyển sang màn hình kế tiếp.

Clusters Task Definition Ouput

  • Lựa chọn Fargate trong Select launch type capability.

Clusters Task Launch Type Ouput

Click button Next step để chuyển sang bước tiếp theo.

  • Khai báo thông tin cấu hình Task Definition
    • Configure task and container definitions
      • Task Definition Name: remindersmgtfargate
      • Requires Compatibilities*: FARGATE
      • Task Role: None
      • Network Mode: awsvpc
    • Task execution IAM role
      • Task execution role: Lựa chọn ECSRemindersMgtTask
    • Task size
      • Task memory (GB): 2GB
      • Task CPU (vCPU): 1 vCPU
    • Container Definitions, click button Add Container
      • Container name*: remindersmgtservice
      • Image*: 729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice
      • Memory Limits (MiB): Soft limit, 400
      • Port mappings
        • Container port: 8000
        • Protocol: tcp

Clusters Task Definition Basic Ouput Cluster Fargate Task Definition Basic

Clusters Task Definition Details Ouput Cluster Fargate Task Execution Role & Size

Clusters Task Definition Container Ouput Add Container

Click button Create để tạo Task Definition với các thông tin cấu hình bên trên.

Màn hình Launch Status hiển thị kết quả khi quá trình kết thúc.

Clusters Task Definition Status Ouput Cluster Fargate Task Launch Status

Thông tin hiển thị cho thấy CloudWatch Log Group mới được tạo ra cho quá trình thực thi Task: /ecs/remindersmgtfargate

Chú ý

Trong một ECS Cluster hoạt động dựa trên Fargate Engine, Network Mode của Task Definition bắt buộc phải sử dụng chế độ awsvpc. Trong chế độ này, mỗi Task trong Cluster sẽ thực hiện giao tiếp thông qua những Elastic Network Interface -ENI riêng biệt (thay vì sử dụng chung ENI của Container như trong chế độ bridge mặc định của ECS). Điều này giúp việc quản lý cấu hình bảo mật được thực hiện chặt chẽ hơn khi chúng ta có thể áp dụng Firewall rules, network ACLs đối với từng Task cụ thể.


Service Tasks

  • Trên màn hình của Clusters -> friendreminders, lựa chọn Services và click button Create để tạo một Service trong Cluster.

Clusters Service Create Ouput Cluster Fargate Service Create

  • Trên màn hình tiếp theo Create service, sử dụng các cấu hình:
    • Trong phần Configure service
      • Launch type: FARGATE
      • Task Definition: remindersmgtfargate
      • Revision: 1 (latest)
      • Platform version: latest
      • Cluster: friendreminders
      • Service name: friendreminders
      • Service type*: REPLICA
      • Number of tasks: 2
      • Minimum healthy percent: 100
      • Maximum percent: 200
    • Trong phần cấu hình Deployment:
      • Deployment type*: Rolling update

Clusters Service Configure Ouput Cluster Fargate Service Configure

Clusters Service Deployment Ouput Cluster Fargate Service Deployment Type Select

Click button Next step để chuyển sang bước tiếp theo.

  • Trên màn hình Configure network, sử dụng các cấu hình
    • VPC and security groups
      • Cluster VPC*: Lựa chọn VPC ID được tạo cho Cluster
      • Subnet*: Lựa chọn cả 2 subnets thuộc về VPC
      • Security groups*: click button Edit để hiện màn hình mới Configure security groups
        • Assigned security groups: lựa chọn Select existing security group
        • Existing security groups: trong danh sách, lựa chọn EcsVpcSg
        • Click Save button để lưu lại các kết quả lựa chọn
      • Auto-assign public IP: ENABLED
    • Trong phần Load balancing
      • Load balancer type*: Lựa chọn Application Load Balancer
      • Load balancer name: remindersmgtlb
    • Trong phần Load balancer name
      • Container name : port: remindersmgtservice:8000:8000
      • Click button Add to load balancer để cấu hình liên kết Target Group
      • Trong phần remindersmgtservice : 8000:
        • Production listener port*: 80:HTTP
        • Production listener protocol*: HTTP
        • Target group name: remindersmgttg
        • Target group protocol: HTTP
        • Target type: ip

Clusters Service Network Ouput Cluster Fargate Service VPC and Subnets

Clusters Service Security Group Ouput Cluster Fargate Service Security Group Select

Clusters Service LB Ouput Cluster Fargate Service Application Load Balancer

Clusters Service LB Link Ouput Cluster Fargate Service Application Load Balancer Target Group

Click button Next step để chuyển sang màn hình Set Auto Scaling (optional)

  • Trên màn hình Set Auto Scaling (optional), sử dụng cấu hình:
    • Service Auto Scaling: Do not adjust the service’s desired count

Clusters Service Auto Scale Ouput Cluster Fargate Service Auto Scaling

Lựa chọn Next step và chuyển sang màn hình kế tiếp.

  • Trên màn hình Review, xác nhận các thông tin cài đặt trước khi click button Create Service để thực hiện việc tạo Service.

Clusters Service Review Ouput Cluster Fargate Service Review

  • Trên màn hình Launch Status, khi việc thực thi kết thúc, click button View Service để xác nhận thông tin Service mới được tạo ra

Clusters Service Launch Ouput Cluster Fargate Service Launch Status

  • Màn hình Service : remindersmgt hiển thị các thông tin liên quan đến remindersmgt service:
    • Cluster: remindersmgt
    • Status: ACTIVE
    • Task Definition: remindersmgtfargate:1
    • Service type: REPLICA
    • Launch type: FARGATE
    • Service role: AWSServiceRoleForECS
    • Created By: arn:aws:iam::729365137003:root

Trong cùng màn hình này, chúng ta có danh sách các Tabs cho phép hiển thị thông tin chi tiết:

  • Details: Thông tin về Load Balance và Networking
  • Tasks: Danh sách và liên kết đến các Tasks thuộc về Service
  • Event: Danh sách Events xảy ra trong Service
  • Auto Scaling: Tự động cấu hình khi số lượng yêu cầu đến Service gia tăng
  • Deployment: Liến kết đến Pipeline để thực hiện quá trình CICD
  • Metrics: Giám sát các thông tin đo lường liên quan đến hoạt động Service
    • CPUUtilization: Phần trăm CPU Units được sử dụng bởi Service
    • MemoryUtilization: Phần trăm Memory được sử dụng bởi Service
  • Tags: Danh sách Tags được sử dụng
  • Logs: Hiển thị thông tin Logs từ CloudWatch Logs, thuộc về các Tasks:
    • f9bfab1e-718c-4f6a-8c86-3eb1978e02c6
    • d6d727a7-ff91-49bd-a777-0dbbe4bb444a

Clusters Service Logs Ouput Cluster Fargate Service Logs

Clusters Service Metrics Ouput Cluster Fargate Service Metrics

Clusters Service RemindersManagement Ouput Cluster Fargate Service Tasks List

  • Từ danh sách các Tasks trong Service, click link để chuyển đến màn hình hiển thị thông tin chi tiết của một Task.

Clusters Service Task Ouput Cluster Fargate Service Task Details

Trong phần Network hiển thị thông tin Pulic IP được sử dụng bởi Task: 13.236.68.144. Dựa trên giá trị IP này, sử dụng địa chỉ http:\\13.236.68.144:8000 để truy cập Reminders Mgt Service:

Clusters Service Final Result Ouput Reminder Managament Serive with Public IP of Cluster Task

Ngoài ra, chúng ta cũng có thể truy cập RemindersManagement Service thông qua giá trị DNS Name của Application Load Balancer - remindersmgt trong EC2 Dashboard.

Clusters Service Load Balancer DNS Ouput Cluster Load Balancer

Clusters Service Load Balancer DNS Ouput Cluster Service Load Balancer DNS


Copyright © 2019-2022 Tuan Anh Le.