【问题标题】:ecs-cli compose service up with a load balancerecs-cli 使用负载均衡器组合服务
【发布时间】:2019-05-22 17:45:05
【问题描述】:

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

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

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

值得注意的是,只要我有一个现有的任务定义,并且在指定负载均衡器的同时通过 Amazon AWS GUI 创建我的服务,一切都对我有用。所以我正在考虑将我所有的 compose 配置移到 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

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

【问题讨论】:

标签: amazon-web-services docker amazon-ecs


【解决方案1】:

似乎最新的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

注意-

  1. target-group-arncontainer-namecontainer-port 选项对于负载均衡器关联是必需的,并且必须在 service up 之后的命令中提供。
  2. 我看到您正在尝试对任务使用awsvpc 模式。我不确定您是否尝试启动 EC2 或 Fargate 类型的启动容器。
  3. 如果您确实需要 awsvpc 模式,请确保您的负载均衡器目标组已创​​建类型为 ip 而不是 instance 的目标。
  4. 如果您使用 EC2 启动类型但使用 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

【讨论】:

  • 嗨@Imran 非常感谢您的详细回复。我正在使用awsvpc 类型和ip 类型的负载平衡器,所以一切都很好。我正在运行 1.12.1 版本,但在尝试使用 --target-group-arn 时仍然出现错误,这也是您使用的版本吗?谢谢!
  • @jordancooperman 我也在 1.12.1 上。你得到什么错误?检查我的例子。 --target-group-arn 的位置非常重要。另外,我仅使用awsvpc 模式对其进行了测试。
  • 好的,按照您指定的顺序,这似乎确实有效,现在我知道compose 采用与up 不同的标志。现在调试一个不同的错误:InvalidParameterException: Unable to assume role and validate the specified targetGroupArn. Please verify that the ECS service role being passed has the proper permissions.\n\tstatus code: 400, 我添加了一个--task-role-arn {AWSServiceRoleForECSARN},但仍然没有骰子。将在这里发布更新,如果您有任何想法,请告诉我。解决后,我会将此答案标记为正确!
  • @jordancooperman 这是 ECS 任务角色。 Optional IAM role that tasks can use to make API requests to authorized AWS services. Create an Amazon Elastic Container Service Task Role in the IAM Console。在您提供上述目标组配置之前,这是否有效?这在您的 ecs-params.yml 中提供,与目标组配置无关。确保您为此提供了完整的 Arn。
  • 您说得对,现在一切正常,感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2013-08-26
  • 2021-10-12
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
相关资源
最近更新 更多