【问题标题】:Amazon ECS: Task definition does not support launch_type FARGATEAmazon ECS:任务定义不支持 launch_type FARGATE
【发布时间】:2019-07-26 04:36:14
【问题描述】:

我有一个在 AWS ECS 中运行的 Fargate 应用程序,我正在尝试通过 AWS CLI (aws-cli/1.16.96 Python/2.7.15 Darwin/18.0.0 botocore/1.12.86) 对其进行更新。

我已经成功构建并推送了镜像,并创建了一个新的任务定义版本。

当我尝试使用以下命令更新服务时:

aws ecs update-service 
    --cluster cluster-winquest-qa 
    --service container-qa-ge-service 
    --desired-count 0
aws ecs update-service 
    --cluster cluster-qa 
    --service container-service 
    --task-definition first-run-task-definition:5 
    --platform-version "LATEST"  
    --desired-count 1

抛出以下错误信息:

An error occurred (InvalidParameterException) when calling the UpdateService operation: Task definition does not support launch_type FARGATE

然后我尝试将 --launch-type "FARGATE" 添加到上述命令中,构建以下命令:

aws ecs update-service 
    --cluster cluster-qa 
    --service container-service 
    --task-definition first-run-task-definition:5 
    --platform-version "LATEST" 
    --launch-type "FARGATE"  
    --desired-count 1

它抛出: Unknown options: --launch-type, FARGATE

我知道错误消息说 Fargate 应用程序不支持任务定义,但我想知道如何使用 AWS CLI 将服务更新到最新的任务定义版本。我将不胜感激任何帮助。谢谢。

【问题讨论】:

    标签: amazon-web-services aws-cli amazon-ecs


    【解决方案1】:

    如果您查看 ecs 命令行参考 here update-service 不支持 --launch-type 标志。它不支持此标志的原因是因为您正在尝试更新已创建的服务。您只能在运行 create-service (here) 时指定启动类型。

    您可能会收到第一个错误的原因是您没有使用 Powered by AWS Fargate 集群类型创建集群。您正在使用 --platform-version 标志,该标志仅用于 Fargate 类型的集群(在 AWS 文档中提到)。

    此外,为了让您的服务使用最新的任务定义,您可以简单地使用--task-definition 标志,因为默认情况下,如果未指定修订版,它会使用最新的 ACTIVE 修订版。

    【讨论】:

      【解决方案2】:

      我解决了。问题是我是如何创建新版本的任务定义的,我必须在那里配置 requiresCompatibilities 参数来指定它。

      我使用了这个文档: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_AWSCLI_Fargate.html

      【讨论】:

        【解决方案3】:

        在使用 Terraform 设置 Amazon ECS 集群时遇到了同样的问题。

        您需要做的就是将此属性添加到您的aws_ecs_task_definition 块中:

        requires_compatibilities = ["FARGATE"]
        

        所以你的任务定义文件看起来像这样:

        resource "aws_ecs_task_definition" "aetd" {
          family                   = var.family
          network_mode             = var.network_mode
          requires_compatibilities = ["FARGATE"]
          cpu                      = var.cpu
          memory                   = var.memory
          execution_role_arn       = var.execution_role_arn
          task_role_arn            = var.task_role_arn
          container_definitions = jsonencode([
        ...
        ...
        }
        

        就是这样

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-16
          • 1970-01-01
          • 1970-01-01
          • 2020-07-22
          • 2019-09-10
          • 2020-03-24
          • 2018-11-04
          • 2019-09-25
          相关资源
          最近更新 更多