Amazon ECS:任务定义不支持 launch_type FARGATE

Posted

技术标签:

【中文标题】Amazon ECS:任务定义不支持 launch_type FARGATE【英文标题】:Amazon ECS: Task definition does not support 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 将服务更新到最新的任务定义版本。我将不胜感激任何帮助。谢谢。

【问题讨论】:

【参考方案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([
...
...

就是这样

【讨论】:

以上是关于Amazon ECS:任务定义不支持 launch_type FARGATE的主要内容,如果未能解决你的问题,请参考以下文章

Amazon ECS:对于 Jenkins amazon-ecs-plugin 的给定值不存在 Fargate 配置

如何在 AWS ECS 任务定义中配置日志

我应该如何将敏感的环境变量传递给 Amazon ECS 任务?

如何更新在 Amazon ECS 上运行的 docker 容器

如何在 Amazon EC2 容器服务 (ECS) 中使用不安全的 docker 注册表?

AWS ECS Fargate - 任务未运行