我正在尝试使用ecs-cli compose在Amazon ECS上管理我的服务和任务。
我找不到使用service up
命令通过应用程序负载平衡器创建新服务的方法(即使该负载平衡器已经存在)。
使用service create
似乎可以实现,但是API与service up
API不同,而且我不确定如何使用create
来指定参数。而且通常最好只使用up
命令以保持一致性。文档非常分散,做相同的事情有很多不同的方法,只是想知道这里有什么最佳实践。任何建议,不胜感激。
值得一提的是,只要我具有现有的任务定义,并且在指定负载均衡器时通过Amazon AWS GUI创建服务,一切都对我有用。因此,我正在考虑将我所有的撰写配置移至task-definition.json并直接与aws ecs
cli一起使用。
我有一个有效的docker-compose.yml
文件:
# docker-compose.yml
version: "3"
services:
application:
image: ${IMAGE_ARN}
command: npm start
ports:
- "8000:8000"
nginx:
image: ${IMAGE_ARN}
ports:
- "80:80"
以及随附的ecs-params.yml
文件:
# ecs-params.yml
version: 1
task_definition:
task_role_arn: ${ROLE_ARN}
task_execution_role: ${ROLE_ARN}
ecs_network_mode: awsvpc
task_size:
mem_limit: 0.5GB
cpu_limit: 256
container_definitions:
- name: application
- name: nginx
run_params:
network_configuration:
awsvpc_configuration:
assign_public_ip: ENABLED
subnets:
- ${SUBNET_1_ID}
- ${SUBNET_2_ID}
security_groups:
- ${SECURITY_GROUP_ID}
我运行来启动该服务的命令是:
ecs-cli compose service up \
--file docker-compose.yaml \
--ecs-params ecs-params.yaml \
--project-name service-name
通过该命令指定负载均衡器配置的任何方法吗?
答案 0 :(得分:3)
似乎最新的ecs-cli
版本确实支持负载均衡器配置以及服务启动。
您是否尝试提供--target-group-arn
选项?假设您已经创建了ALB和目标组来关联ECS服务。这是我刚刚测试过的示例命令。
ecs-cli compose --file docker-compose.yaml --project-name nginx \
--ecs-params ecs-params.yaml service up \
--target-group-arn "arn:aws:elasticloadbalancing:us-east-1:xxxxxxxx:targetgroup/awsvpc-nginx/2bf8921935c827bd" \
--container-name nginx --container-port 80
注意-
target-group-arn
,container-name
和container-port
选项对于负载均衡器关联是必需的,并且必须在service up
之后的命令中提供。awsvpc
模式执行任务。我不确定您是否尝试启动EC2或Fargate类型的启动容器。awsvpc
模式,请确保您的负载均衡器目标组创建的目标类型为ip
而不是instance
。awsvpc
模式,请确保EC2 AMI是Amazon-ECS优化AMI。如果您使用的是Fargate类型,那么您的assign_public_ip
应该为DISABLED
。请让我知道您的反馈。
参考- https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cmd-ecs-cli-compose-service.html
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html