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 配置
我应该如何将敏感的环境变量传递给 Amazon ECS 任务?
如何更新在 Amazon ECS 上运行的 docker 容器