Hướng dẫn ecs python - trăn ecs

Đây là bài viết đầu tiên trong loạt bài Deploy dự án Ruby on Rails trên Amazon ECS. Trong bài viết này, mình sẽ nói về các ý tưởng cần thiết để bắt đầu 1 dự án trên ECS.

Nội dung chính

  • ECS là gì và tại sao sử dụng ECS
  • Ý tưởng
  • Docker Registry
  • Task Defination
  • ECS Service
  • ECS Cluster
  • Amazon ECS CLI
  • ECS Cluster sử dụng EC2 Instances
  • ECS Cluster sử dụng Fargate Engine
  • AWS Copilot CLI
  • Video liên quan

ECS là gì và tại sao sử dụng ECS

Ý tưởng

Docker Registry

Task Defination

ECS Service

Hướng dẫn ecs python - trăn ecs

ECS Cluster

Amazon ECS CLI

ECS Cluster sử dụng EC2 Instances

  • ECS Cluster sử dụng Fargate Engine
  • AWS Copilot CLI
  • Video liên quan
  • ECS (Elastic container service) là 1 dịch vụ điều phối container hiệu suất cao có hỗ trợ Docker. Nó cho phép lập trình viên chạy các ứng dụng được đóng gói trên AWS. ECS được biết đến như là 1 đối thủ cạnh tranh với Kubernetes của Google. AWS tích hợp ECS cùng với rất nhiều các dịch vụ khác đi kèm, khiến nó trở thành 1 lựa chọn số 1 khi chạy phần lớn khối lượng dự án trên nền tảng AWS.
  • Tại sao lại cần 1 dịch vụ điều phối?

Ý tưởng

Docker Registry

Task Defination

ECS Service

Task Defination

ECS Service

ECS Cluster

Task defination bao gồm các thông tin sau:

  • Cần bao nhiêu CPU và bộ nhớ cho 1 task?
  • Định nghĩa 1 container trong 1 task:
    • Container tiêu thụ bao nhiêu CPU và memory? Nó không được vượt quá con số được phân bổ ban đầu đối với 1 task. Nếu có nhiều hơn 1 container trong 1 task thì tổng số lượng tiêu thụ CPU và memory không được vượt quá con số phân bổ ban đầu.
    • Bạn quản lý các log ra sao?
    • Docker image nào sẽ được sử dụng?
    • Biến môi trường nào sẽ khả dụng cho container?
    • Câu lệnh nào sẽ được sử dụng để start container?

Vì cấu hình này thay đổi xuyên suốt vòng đời của 1 ứng dụng, do đó task definations có thể có nhiều phiên bản, được gọi là revision.

ECS Service

1 service sẽ đảm bảo luôn có 1 số lượng n task chạy tại 1 thời điểm. Khi 1 container chết, nó sẽ sinh ra 1 phiên bản để back up. Service này cũng chịu trách nhiệm instance nào sẽ được deploy.

Khi sinh ra 1 container, ECS service sẽ đảm bảo container đó được đăng ký lên ALB (Application Elastic Load Balancer) găn với nó. 1 ALB thực thi việc điều hướng lưu lượng trên các container trong hệ thống. 1 khi container được đăng ký với ALB, lưu lượng có thể được chuyển qua container đó.

Có 2 loại service là ECS-EC2 và ECS-Fargate.ECS-EC2ECS-Fargate.

ECS-EC2 service triển khai các container trên EC2 instance mà ta có quyền truy cập đến. ECS-Fargate thì chạy container trên EC2 instance được quản lý bởi AWS, do đó ta sẽ không có quyền truy cập đến các instance này.

ECS Cluster

1 cụm (cluster) là tổ hợp các service và task. Khi ta chạy service ECS-EC2, 1 cụm còn được hiểu là 1 nhóm các EC2 instance. Bạn có thể thiết lập số lượng và loại EC2 instance mà bạn muốn sử dụng. Tổng số đơn vị CPU và đơn vị bộ nhớ của từng instance này xác định số lượng container có thể thiết lập trong 1 cluster.

Lấy ví dụ: ta tạo ra 1 cluster cho ứng dụng Image processing. Nó có 2 service ECS-EC2: 1 web service thực hiện render website, và 1 service xử lý ảnh thực hiện việc resize. Cụm cũng bao gồm 3 c5.large instance, mỗi cái có 1 2vCPU (2.048 đơn vị CPU) và 4 GiB bộ nhớ. Cách setup này cho chúng ta 6.144 đơn vị CPU và 12GiB bộ nhớ. Dung lượng này được chia sẻ giữa tất cả các ECS-EC2 service trong cụm.

Giả sử web service của chúng ta cần 1.024 CPU units và 2GB RAM đối với 1 task, và service xử lý ảnh cần tới 2.048 CPU units và 4GB RAM cho 1 task, thì chúng ta có thể đưa vào 2 image processing tasks và 2 web service tasks vào trong 3 c5.large instance này. Nếu chúng ta muốn đưa thềm vào 1 web service task nữa, điều này là không thể vì toàn bộ tài nguyên của 3 c5.large instance đã được phân bố đầy đủ cho 4 task trước đó.

Trong phần tiếp theo, chúng ta sẽ thực hiện setup tài khoản AWS và push image lên AWS's image registry.

Bài viết được dịch từ Deploy Rails in Amazon ECS: Part 1 - Concepts

Nội dung

Trong bài viết ECS-P.1, chúng ta đã sử dụng giao diện AWS Console để thực hành các bước tạo ra những thành phần cơ bản của ECS: Cluster, Task Definition, Service. Sau khi đã nắm được cấu trúc và nguyên tắc vận hành của ECS, chúng ta có thể chuyển sang Amazon ECS Command Line Interface (CLI) để triển khai quá trình này một cách nhanh chóng và hiệu quả hơn.

Phiên bản đầu tiên của ECS CLI được Amazon giới thiệu vào năm 2015. Đây là một công cụ cho phép người sử dụng giao tiếp với dịch vụ ECS thông qua những câu lệnh như tạo, chỉnh sửa hay giám sát các đối tượng ECS Cluster, Task etc… ECS CLI cũng hỗ trợ kiến trúc Docker Compose với khả năng định nghĩa và triển khai đồng thời nhiều containers trong một ứng dụng. Phiên bản CLI v2 được thiết kế lại và giới thiệu vào năm 2019 dưới tên gọi mới AWS Copilot CLI cùng những bổ sung giúp việc triển khai và cập nhật ứng dụng trở nên dễ dàng, liền mạch hơn.

Amazon ECS CLI

ECS Cluster sử dụng EC2 Instances

Trong phần này, chúng ta sử dụng ECS CLI để tạo và cài đặt dịch vụ RemindersManagement trên một ECS Cluster với cơ chế thực thi dựa trên EC2.

Bước 1: Cài đặt ECS CLI Cài đặt ECS CLI

  • Trên hệ điều hành MacOS hoặc Linux, sử dụng lênh curl để download ecs-cli:

sudo curl -Lo /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest

  • Cài đặt quyền thực thi lên file ecs-cli:

sudo chmod +x /usr/local/bin/ecs-cli

  • Xác nhận phiên bản cài đặt:

Output

ecs-cli version 1.20.0 (7547c45)

Hướng dẫn

Để đảm bảo tính bảo mật khi download ecs-cli file từ server, trong quá trình cài đặt, chúng ta có thể sử dụng PGP Signature để so sánh và xác nhận tính toàn vẹn trong nội dung file download. Có thể tham khảo các bước thực hiện quá trình này tại link: ECS CLI Install

Bước 2: Khai báo Cluster Configurations và tạo Cluster Khai báo Cluster Configurations và tạo Cluster

Cluster Configuration là một tập hợp các thuộc tính (fields) mô tả cấu hình Amazon ECS cluster. Các thuộc tính cơ bản bao gồm: là một tập hợp các thuộc tính (fields) mô tả cấu hình Amazon ECS cluster. Các thuộc tính cơ bản bao gồm:

  • Cluster Name: --cluster
  • Amazon Region: --region
  • Launch Type (EC2/FARGATE): --default-launch-type

Giá trị EC2 cho Launch Type được áp dụng mặc định khi không thực hiện khai báo.

  • Trong trường hợp sử dụng EC2, sử dụng câu lệnh sau để khai báo Cluster Configuration friendreminders:

ecs-cli configure --cluster friendreminders --default-launch-type EC2 --config-name friendreminders --region ap-southeast-2

Output

INFO[0000] Saved ECS CLI cluster configuration friendreminders.

Thông tin cấu hình được lưu trong file ~/.ecs/config với nội dung

version:v1default:friendremindersclusters:friendreminders:cluster:friendremindersregion:ap-southeast-2default_launch_type:EC2: v1 default: friendreminders clusters: friendreminders: cluster: friendreminders region: ap-southeast-2 default_launch_type: EC2

  • Sử dụng EC2 keypair FriendReminders, thực hiện lệnh ecs-cli up để triển khai cluster bao gồm 2 EC2 Instance với cấu hình t2.medium

ecs-cli up --keypair FriendReminders --capability-iam --size 2 --instance-type t2.medium

Output

INFO[0000] Saved ECS CLI cluster configuration friendreminders.

  • Thông tin cấu hình được lưu trong file ~/.ecs/config với nội dung

Sử dụng EC2 keypair FriendReminders, thực hiện lệnh ecs-cli up để triển khai cluster bao gồm 2 EC2 Instance với cấu hình t2.medium

ecs-cli up --keypair FriendReminders --capability-iam --size 2 --instance-type t2.medium
  • INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.45.0 and Docker version 19.03.6-ce INFO[0001] Created cluster cluster=friendreminders region=ap-southeast-2 INFO[0001] Waiting for your cluster resources to be created... INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0062] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0123] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-01f658bc83e0eab55 Security Group created: sg-07a7e8837f60bf314 Subnet created: subnet-04474333e5ffb64c9 Subnet created: subnet-0744ea43d4cc0b6af Cluster creation succeeded.

Xác nhận thông tin Cluster friendreminders và EC2 Instance trên AWS Console:

Output

{"containerInstanceArns":["arn:aws:ecs:ap-southeast-2:729365137003:container-instance/00c71427-9c6e-4191-ac12-bc17bec55fd8","arn:aws:ecs:ap-southeast-2:729365137003:container-instance/556a472b-bf5c-44c7-bd55-d35bcb84eb9c"]}"containerInstanceArns":["arn:aws:ecs:ap-southeast-2:729365137003:container-instance/00c71427-9c6e-4191-ac12-bc17bec55fd8", "arn:aws:ecs:ap-southeast-2:729365137003:container-instance/556a472b-bf5c-44c7-bd55-d35bcb84eb9c"]}

  • INFO[0000] Saved ECS CLI cluster configuration friendreminders.
    • Thông tin cấu hình được lưu trong file ~/.ecs/config với nội dung
    • Sử dụng EC2 keypair FriendReminders, thực hiện lệnh ecs-cli up để triển khai cluster bao gồm 2 EC2 Instance với cấu hình t2.medium
    • ecs-cli up --keypair FriendReminders --capability-iam --size 2 --instance-type t2.medium
    • INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.45.0 and Docker version 19.03.6-ce INFO[0001] Created cluster cluster=friendreminders region=ap-southeast-2 INFO[0001] Waiting for your cluster resources to be created... INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0062] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0123] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-01f658bc83e0eab55 Security Group created: sg-07a7e8837f60bf314 Subnet created: subnet-04474333e5ffb64c9 Subnet created: subnet-0744ea43d4cc0b6af Cluster creation succeeded.
    • Xác nhận thông tin Cluster friendreminders và EC2 Instance trên AWS Console:
    • ECS Cluster Overview
    • ECS EC2 Instances List
    • Danh sách EC2 Instances được tạo ra trong friendreminders cluster cũng có thể kiểm tra bởi lệnh:
    • aws ecs list-container-instances --cluster friendreminders
    • Về bản chất, câu lệnh ecs-cli up sử dụng CloudFormation để tạo stack amazon-ecs-cli-setup-friendreminders với những AWS Resources cần thiết cho hoạt động của ECS EC2 Cluster. Sử dụng AWS Console, CloudFormation -> Stack, trong mục Resources chúng ta có được danh sách các thành phần tạo bởi ecs-cli up:

Autoscaling Group

Autoscaling Launch Configuration Triển khai ECS Service

EC2 VPC

  • EC2 Internet Gateway
  • EC2 VPC Gateway Attachment

EC2 Route Table

docker-compose.yml

version:'3'services:remindersmgtservice:image:729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice:latestports:-"80:8000"logging:driver:awslogsoptions:awslogs-group:/ecs/remindersmgtec2awslogs-region:ap-southeast-2awslogs-stream-prefix:ecs/remindersmgtservice: '3' services: remindersmgtservice: image: 729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice:latest ports: - "80:8000" logging: driver: awslogs options: awslogs-group: /ecs/remindersmgtec2 awslogs-region: ap-southeast-2 awslogs-stream-prefix: ecs/remindersmgtservice

ecs-params.yml

version:1task_definition:ecs_network_mode:bridgeservices:remindersmgtservice:essential:true: 1 task_definition: ecs_network_mode: bridge services: remindersmgtservice: essential: true

  • EC2 Route

2 Public EC2 Subnets

Output

INFO[0000] Saved ECS CLI cluster configuration friendreminders.

Thông tin cấu hình được lưu trong file ~/.ecs/config với nội dung

Sử dụng EC2 keypair FriendReminders, thực hiện lệnh ecs-cli up để triển khai cluster bao gồm 2 EC2 Instance với cấu hình t2.medium

ecs-cli up --keypair FriendReminders --capability-iam --size 2 --instance-type t2.medium

INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.45.0 and Docker version 19.03.6-ce INFO[0001] Created cluster cluster=friendreminders region=ap-southeast-2 INFO[0001] Waiting for your cluster resources to be created... INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0062] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0123] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-01f658bc83e0eab55 Security Group created: sg-07a7e8837f60bf314 Subnet created: subnet-04474333e5ffb64c9 Subnet created: subnet-0744ea43d4cc0b6af Cluster creation succeeded.

  • Xác nhận thông tin Cluster friendreminders và EC2 Instance trên AWS Console:

ECS Cluster Overview

Output

INFO[0000] Saved ECS CLI cluster configuration friendreminders.

  • Kiểm Tra trạng Tháis Nhiệm vụ Trong Dịch vụ Trên AWS Console

Nhiệm vụ ECS chạy

VớI IP công cộng CủA Container E93D7578-C47C-4DA4-86D6-D54CE9DDDADF, Xác định

Chi tiết nhiệm vụ ECS

Dịch vụ Quản lý Nhắc nhở - UI Swagger

BướC 4: Cụm Xoá ECS Xoá ECS Cluster

  • Thực hiện loại bỏ dịch vụ khỏi cụm với lệnh:

ECS-CLI Compose-Dịch vụ ReminderSmgTec2 của ECS-CLI

Đầu ra

Thông tin [0000] Dịch vụ dịch vụ ECS đã xóa = reminderSmgTec2 Info [0000] Trạng thái dịch vụ mong muốnCount = 0 RunningCount = 1 ServiceName = reminderSmgtec2 Thông tin [0020] Trạng thái dịch vụ mong muốn 1 Nhiệm vụ chạy: (Nhiệm vụ 0182BCA2-6BB9-4FF2-9EB7-F715058BAC18). Dấu thời gian = "2020-10-14 07:08:54 +0000 UTC" Thông tin [0020] Dịch vụ ECS đã đạt đến trạng thái ổn định mong muốn = 0 RunningCount = 0 ServiceName = reminderSmgTec2

  • Thực hiện loại bỏ ecs cluster friendreminder:

ECS-Cli Down-Cluster-Config Friendreminder

Sau Khing Xát

Bạn có chắc bạn muốn xóa cụm của mình không? .

ECS CLUSTER Sử DụNG ĐỘNG CƠ FARGATE

Trong phần nào, chúnt ta Thênm vào đao, chún ta sẽ khai báio và kết

BướC 1: Cập NHật Cấu hÌnh Ngix - nginx.conf Cập nhật cấu hình Ngix - nginx.conf

  • Trong ECS ​​CLUSTER HOạT ĐộNG Theo Mô Hình Do vậy để nginx container giao tiếp /c với reminderSman quản lý container

Công nhân_Processes4; sự kiện {worker_connections1024; } http {sendFileon; UPSTRAMAPP_SERVERS {Server127.0.0.1: 8000; } máy chủ {Nghe80; vị trí/{proxy_passhttp: // app_servers; }} máy chủ {Listen443SSL; server_namelocalhost; ssl_certificate /etc/ssl/certs/localhost.crt; ssl_certificate_key /etc/ssl/private/localhost.key; vị trí/{proxy_passhttp: // app_servers; proxy_Redirectoff; proxy_http_version1.1; proxy_cache_bypass $ http_upgrade; proxy_set_headerupgrade $ http_upgrade; proxy_set_headerConnectionKeep-alive; proxy_set_headerhost $ host; proxy_set_headerx-real-IP $ remote_addr; proxy_set_headerx-forededed-for $ proxy_add_x_forededed_for; proxy_set_headerx-forededed-proto $ Sơ đồ; proxy_set_headerx-forededed-host $ server_name; }}} 4; events { worker_connections 1024; } http { sendfile on; upstream app_servers { server 127.0.0.1:8000; } server { listen 80; location / { proxy_pass http://app_servers; } } server { listen 443 ssl; server_name localhost; ssl_certificate /etc/ssl/certs/localhost.crt; ssl_certificate_key /etc/ssl/private/localhost.key; location / { proxy_pass http://app_servers; proxy_redirect off; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $server_name; } } }

Với khai báio nào, nginx proxy sẽ xử lý các yêu cầu gửi dến qua port 80 (http) hoặc 443 (https), cập NH

  • Sau Khih Sau khi

Trong thư mục ReminderMan Quản lý.API/proxy, hình ảnh docker tạo

Docker Build -T 729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/nginx:fargate.

Đầu ra

Thông tin [0000] Dịch vụ dịch vụ ECS đã xóa = reminderSmgTec2 Info [0000] Trạng thái dịch vụ mong muốnCount = 0 RunningCount = 1 ServiceName = reminderSmgtec2 Thông tin [0020] Trạng thái dịch vụ mong muốn 1 Nhiệm vụ chạy: (Nhiệm vụ 0182BCA2-6BB9-4FF2-9EB7-F715058BAC18). Dấu thời gian = "2020-10-14 07:08:54 +0000 UTC" Thông tin [0020] Dịch vụ ECS đã đạt đến trạng thái ổn định mong muốn = 0 RunningCount = 0 ServiceName = reminderSmgTec2

Thực hiện loại bỏ ecs cluster friendreminder:

ECS-Cli Down-Cluster-Config Friendreminder

Sau Khing Xát Tham khảo cách thức tạo ECR Repository của Nginx Container trong Bước 1 của bài viết Swarm - P.3

Bạn có chắc bạn muốn xóa cụm của mình không? . Khai báo Cluster Configurations và tạo Cluster

  • ECS CLUSTER Sử DụNG ĐỘNG CƠ FARGATE

Trong phần nào, chúnt ta Thênm vào đao, chún ta sẽ khai báio và kết

Đầu ra

Thông tin [0000] Dịch vụ dịch vụ ECS đã xóa = reminderSmgTec2 Info [0000] Trạng thái dịch vụ mong muốnCount = 0 RunningCount = 1 ServiceName = reminderSmgtec2 Thông tin [0020] Trạng thái dịch vụ mong muốn 1 Nhiệm vụ chạy: (Nhiệm vụ 0182BCA2-6BB9-4FF2-9EB7-F715058BAC18). Dấu thời gian = "2020-10-14 07:08:54 +0000 UTC" Thông tin [0020] Dịch vụ ECS đã đạt đến trạng thái ổn định mong muốn = 0 RunningCount = 0 ServiceName = reminderSmgTec2

Thực hiện loại bỏ ecs cluster friendreminder:

version:v1default:friendremindersclusters:friendreminders:cluster:friendremindersregion:ap-southeast-2default_launch_type:FARGATE: v1 default: friendreminders clusters: friendreminders: cluster: friendreminders region: ap-southeast-2 default_launch_type: FARGATE

ecs-cli up --cluster-config friendreminders --force

Lưu ý việc sử dụng tham số --force trong trường hợp đang tồn tại một CloudFormation Stack có cùng tên trên hệ thống. Output của câu lệnh cho chúng ta biết được giá trị ID của VPC và Subnet sử dụng bởi Cluster.

INFO[0000] Created cluster cluster=friendreminders region=ap-southeast-2 INFO[0001] Waiting for your CloudFormation stack resources to be deleted... INFO[0001] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS INFO[0062] Waiting for your cluster resources to be created... INFO[0062] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-0fcf5ca95e08e0602 Subnet created: subnet-0fe765bea2942cf21 Subnet created: subnet-007fc3b2adcc56398 Cluster creation succeeded.

Xác nhận Cluster friendreminders đã được tạo ra trên AWS Console:

ECS Fargate Cluster Overview

Bước 3: Cập nhật Security Group cho Cluster VPC Cập nhật Security Group cho Cluster VPC

Với giá trị ID của VPC: vpc-0fcf5ca95e08e0602, thực hiện những lệnh sau để cập nhật Security Group cho phép giao tiếp qua port 80:

  • Tìm giá trị Security Group ID:

aws ec2 describe-security-groups --filters Name=vpc-id,Values=vpc-0fcf5ca95e08e0602 --region ap-southeast-2

Output

{"SecurityGroups":[{"Description":"default VPC security group","GroupName":"default","IpPermissions":[{"IpProtocol":"-1","IpRanges":[],"Ipv6Ranges":[],"PrefixListIds":[],"UserIdGroupPairs":[{"GroupId":"sg-081c2fc0b6df262ff","UserId":"729365137003"}]}],"OwnerId":"729365137003","GroupId":"sg-081c2fc0b6df262ff","IpPermissionsEgress":[{"IpProtocol":"-1","IpRanges":[{"CidrIp":"0.0.0.0/0"}],"Ipv6Ranges":[],"PrefixListIds":[],"UserIdGroupPairs":[]}],"VpcId":"vpc-0fcf5ca95e08e0602"}]}"SecurityGroups":[{"Description": "default VPC security group","GroupName":"default","IpPermissions":[{"IpProtocol":"-1","IpRanges":[], "Ipv6Ranges":[],"PrefixListIds":[],"UserIdGroupPairs":[{"GroupId":"sg-081c2fc0b6df262ff","UserId":"729365137003"} ]}],"OwnerId":"729365137003","GroupId":"sg-081c2fc0b6df262ff","IpPermissionsEgress":[{"IpProtocol": "-1","IpRanges":[{"CidrIp":"0.0.0.0/0"}],"Ipv6Ranges":[],"PrefixListIds":[], "UserIdGroupPairs":[]}],"VpcId":"vpc-0fcf5ca95e08e0602"}]}

  • Sử dụng giá trị Security Group ID: sg-081c2fc0b6df262ff, bổ sung Firewall rule:

aws ec2 authorize-security-group-ingress --group-id sg-081c2fc0b6df262ff --protocol tcp --port 80 --cidr 0.0.0.0/0 --region ap-southeast-2

  • Sử dụng lại lệnh aws ec2 describe-security-groups để kiểm tra kết quả

aws ec2 describe-security-groups --filters Name=vpc-id,Values=vpc-0fcf5ca95e08e0602 --region ap-southeast-2

Output

{"SecurityGroups":[{"Description":"defaultVPCsecuritygroup","GroupName":"default","IpPermissions":[{"IpProtocol":"-1","IpRanges":[],"Ipv6Ranges":[],"PrefixListIds":[],"UserIdGroupPairs":[{"GroupId":"sg-081c2fc0b6df262ff","UserId":"729365137003"}]},{"FromPort":80,"IpProtocol":"tcp","IpRanges":[{"CidrIp":"0.0.0.0/0"}],"Ipv6Ranges":[],"PrefixListIds":[],"ToPort":80,"UserIdGroupPairs":[]}],"OwnerId":"729365137003","GroupId":"sg-081c2fc0b6df262ff","IpPermissionsEgress":[{"IpProtocol":"-1","IpRanges":[{"CidrIp":"0.0.0.0/0"}],"Ipv6Ranges":[],"PrefixListIds":[],"UserIdGroupPairs":[]}],"VpcId":"vpc-0fcf5ca95e08e0602"}]} "SecurityGroups": [ { "Description": "defaultVPCsecuritygroup", "GroupName": "default", "IpPermissions": [ { "IpProtocol": "-1", "IpRanges": [], "Ipv6Ranges": [], "PrefixListIds": [], "UserIdGroupPairs": [ { "GroupId": "sg-081c2fc0b6df262ff", "UserId": "729365137003" } ] }, { "FromPort": 80, "IpProtocol": "tcp", "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "Ipv6Ranges": [], "PrefixListIds": [], "ToPort": 80, "UserIdGroupPairs": [] } ], "OwnerId": "729365137003", "GroupId": "sg-081c2fc0b6df262ff", "IpPermissionsEgress": [ { "IpProtocol": "-1", "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "Ipv6Ranges": [], "PrefixListIds": [], "UserIdGroupPairs": [] } ], "VpcId": "vpc-0fcf5ca95e08e0602" } ] }

{"SecurityGroups":[{"Description":"default VPC security group","GroupName":"default","IpPermissions":[{"IpProtocol":"-1","IpRanges":[],"Ipv6Ranges":[],"PrefixListIds":[],"UserIdGroupPairs":[{"GroupId":"sg-081c2fc0b6df262ff","UserId":"729365137003"}]}],"OwnerId":"729365137003","GroupId":"sg-081c2fc0b6df262ff","IpPermissionsEgress":[{"IpProtocol":"-1","IpRanges":[{"CidrIp":"0.0.0.0/0"}],"Ipv6Ranges":[],"PrefixListIds":[],"UserIdGroupPairs":[]}],"VpcId":"vpc-0fcf5ca95e08e0602"}]} Triển khai ECS Service

  • Sử dụng giá trị Security Group ID: sg-081c2fc0b6df262ff, bổ sung Firewall rule:
    • aws ec2 authorize-security-group-ingress --group-id sg-081c2fc0b6df262ff --protocol tcp --port 80 --cidr 0.0.0.0/0 --region ap-southeast-2
    • Sử dụng lại lệnh aws ec2 describe-security-groups để kiểm tra kết quả
  • Bước 4: Triển khai ECS Service

docker-compose.yml

version:'3'services:nginx:image:729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/nginx:fargateports:-"80:80"-"443:443"logging:driver:awslogsoptions:awslogs-group:/ecs/remindersmgtfargateawslogs-region:ap-southeast-2awslogs-stream-prefix:ecs/nginxremindersmgtservice:image:729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice:latestports:-"8000:8000"logging:driver:awslogsoptions:awslogs-group:/ecs/remindersmgtfargateawslogs-region:ap-southeast-2awslogs-stream-prefix:ecs/remindersmgt: '3' services: nginx: image: 729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/nginx:fargate ports: - "80:80" - "443:443" logging: driver: awslogs options: awslogs-group: /ecs/remindersmgtfargate awslogs-region: ap-southeast-2 awslogs-stream-prefix: ecs/nginx remindersmgtservice: image: 729365137003.dkr.ecr.ap-southeast-2.amazonaws.com/remindersmgtservice:latest ports: - "8000:8000" logging: driver: awslogs options: awslogs-group: /ecs/remindersmgtfargate awslogs-region: ap-southeast-2 awslogs-stream-prefix: ecs/remindersmgt

ecs-params.yml

version:1task_definition:task_execution_role:ECSRemindersMgtTaskecs_network_mode:awsvpctask_size:mem_limit:0.5GBcpu_limit:256run_params:network_configuration:awsvpc_configuration:subnets:-"subnet-0fe765bea2942cf21"-"subnet-007fc3b2adcc56398"security_groups:-"sg-081c2fc0b6df262ff"assign_public_ip:ENABLED: 1 task_definition: task_execution_role: ECSRemindersMgtTask ecs_network_mode: awsvpc task_size: mem_limit: 0.5GB cpu_limit: 256 run_params: network_configuration: awsvpc_configuration: subnets: - "subnet-0fe765bea2942cf21" - "subnet-007fc3b2adcc56398" security_groups: - "sg-081c2fc0b6df262ff" assign_public_ip: ENABLED

Tương tự như với EC2 Cluster, việc triển khai Service trong Fargate Cluster cần cung cấp cấu hình:

  • docker-compose.yml - cấu hình các Tasks thực thi bên trong Services

ecs-params.yml - tham số mô tả hoạt động của ECS (network, role…)

Output:

Tạo folder ecs-fargate-demo với những files sau:

Sử dụng AWS Console để kiểm tra trạng thái Service, Task và Containers thực thi trong Task:

ECS Fargate Running Task with multi-containers

Với giá trị IP của Elastic Network Interface sử dụng bởi Task chúng ta có thể kiểm tra kết quả thực thi của RemindersManagement Service thông qua NGINX proxy

ECS Fargate Task Execution

Bước 5: Xoá ECS Cluster Xoá ECS Cluster

  • Thực hiện loại bỏ service khỏi cluster với lệnh:

ecs-cli compose --project-name remindersmgtfargate service down

Output

INFO[0000] Deleted ECS service service=remindersmgtfargate INFO[0000] Service status desiredCount=0 runningCount=1 serviceName=remindersmgtfargate INFO[0005] Service status desiredCount=0 runningCount=0 serviceName=remindersmgtfargate INFO[0005] (service remindersmgtfargate) has stopped 1 running tasks: (task 6e45416687bf4611b6d80e3273cc7453). timestamp="2020-10-15 01:49:23 +0000 UTC" INFO[0005] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=remindersmgtfargate

  • Thực hiện loại bỏ ECS Cluster friendreminders:

ecs-cli down --cluster-config friendreminders

Sau khi xác nhận y để tiếp tục quá trình loại bỏ, kết quả thực thi của câu lệnh:

Are you sure you want to delete your cluster? [y/N] y INFO[0002] Waiting for your cluster resources to be deleted... INFO[0003] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS INFO[0064] Deleted cluster cluster=friendreminders

Kết luận

ECS CLI cung cấp một phương thức thuận tiện hơn so với cách sử dụng AWS Console khi triển khai các đối tượng như Cluster, Service, Task. Tuy vậy, việc sử dụng các câu lệnh riêng rẽ vẫn tồn tại những điểm hạn chế, đặc biệt là khả năng tái sử dụng. Trong phần tiếp theo, chúng ta sẽ sử dụng bộ công cụ AWS Cloud Development Kit (CDK) để khắc phục điểm yếu trên. Ngoài ra, CDK còn cung cấp khả năng tuỳ biến cao, cho phép kết hợp việc triển khai cơ sở hạ tầng ECS và cài đặt dịch vụ Microservices trong cùng một qui trình Pipeline đem lại tính hiệu quả cao nhất cho hoạt động CICD.

AWS Copilot CLI

Tài liệu tham khảo

  • Installing the Amazon ECS CLI
  • AWS Copilot CLI (preview)
  • Amazon ECS CLI

Copyright © 2019-2022 Tuan Anh Le.