ecs-cli 使用负载均衡器组合服务

jor*_*man 5 amazon-web-services amazon-ecs docker

我正在尝试使用 ecs-cli compose 来管理我在 Amazon ECS 上的服务和任务。

我无法找到使用该service up命令创建带有应用程序负载均衡器的新服务的方法(即使该负载均衡器已经存在)。

这似乎可以使用service create,但 API与API 不同service up,我不确定如何以与create. up为了保持一致性,通常最好只使用该命令。文档非常分散,有很多不同的方法可以做同样的事情,只是想知道这里有什么最佳实践。任何建议都非常感谢。

值得注意的是,一切都对我有用,只要我有一个现有的任务定义并且我在指定负载均衡器的同时通过 Amazon AWS GUI 创建我的服务。所以我正在考虑将我所有的 compose 配置移动到一个 task-definition.json 并直接与aws ecscli 一起使用。

我有一个工作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"
Run Code Online (Sandbox Code Playgroud)

和一个随附的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}
Run Code Online (Sandbox Code Playgroud)

我运行以启动服务的命令是:

ecs-cli compose service up \
--file docker-compose.yaml \
--ecs-params ecs-params.yaml \
--project-name service-name
Run Code Online (Sandbox Code Playgroud)

有什么方法可以通过该命令指定负载均衡器配置?

Imr*_*ran 7

似乎最新ecs-cli版本确实支持带有服务的负载均衡器配置。

您是否尝试过提供--target-group-arn选项?假设您已经创建了 ALB 和 Target Group 来关联 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
Run Code Online (Sandbox Code Playgroud)

笔记 -

  1. target-group-arn,container-namecontainer-port选项对于负载平衡器关联是必需的,并且必须在service up.
  2. 我看到您正在尝试使用awsvpc模式来完成任务。我不确定您是否正在尝试启动 EC2 或 Fargate 类型的启动容器。
  3. 如果您确实需要awsvpc模式,请确保您的负载均衡器目标组已使用 typeip而不是instance.
  4. 如果您使用 EC2 启动类型但使用awsvpc模式,请确保 EC2 AMI 是 Amazon-ECS Optimized 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