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([
...
...
}
就这些了。
我在 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([
...
...
}
就这些了。