问题描述
我首先使用以下命令启动集群实例实例:
sudo ecs-cli up --region MY REGION --keypair MY KEY PAIR --instance-type t2.micro --capability-iam --size 1 --cluster MY CLUSTER NAME --spot-price 0.01
然后,使用以下docker-compose.yml和ecs-params.yml文件:
version: '3'
services:
selenium:
image: selenium/standalone-chrome
...etc
api:
image: myapithatusesselenium/myapithatusesselenium
ports:
- 3000:3000
links:
- selenium
...etc
version: 1
task_definition:
task_execution_role: ROLE ID
services:
selenium:
cpu_shares: 600
mem_limit: 700000000
api:
repository_credentials:
credentials_parameter: REPO CREDENTIALS
cpu_shares: 400
mem_limit: 300000000
我正在使用此命令通过负载均衡器部署服务:
sudo ecs-cli compose --file docker-compose.yml --ecs-params ecs-params.yml --project-name MY PROJECT NAME service up --cluster MY CLUSTER NAME --target-group-arn LOAD BALANCER RESSOURCE ID --container-name api --container-port 3000
因此,当我的API负载很大时(当它开始通知我API即将关闭时),我可以通过使用以下命令进行扩展来添加其他实例:
# 1 - scale the number of ec2 instances in the cluster
sudo ecs-cli scale --size 3 --capability-iam
# 2 - scale the number of tasks
sudo ecs-cli compose --file docker-compose.yml --project-name MY PROJECT NAME service scale 3
您可以看到任务数和ec2实例数相同,因为每个容器可以处理一个任务。
当负载不多时,我再次减小尺寸。
我现在需要的是一种自动完成此功能的方法(自动缩放)。我不知道该怎么做。
谢谢!
解决方法
ECS不会自动缩放。为此,您必须使用应用程序自动缩放服务。您需要使用常规的AWS CLI并调用register-scalable-target,然后创建缩放策略
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-auto-scaling.html
https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html