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

Amazon ECS: Task definition does not support launch_type FARGATE

我在 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 将服务更新到最新的任务定义版本。我将不胜感激任何帮助。谢谢。

如果您查看 ecs 命令行参考 here update-service does not support --launch-type flag. The reason it does not support this flag is because you are trying to update a service which is already created. You can only specify launch type when you are running create-service (here)。

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

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

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

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

使用 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([
...
...
}

就这些了