Fargate 启动类型的 Amazon ECS 集群 - Amazon Elastic Container Service

Fargate 启动类型的 Amazon ECS 集群

Amazon ECS 容量提供程序为集群中的任务管理基础设施的扩缩。每个集群可以有一个或多个容量提供程序和一个可选的容量提供程序策略。容量提供程序策略确定任务在集群的容量提供程序之间的分布方式。运行独立任务或创建服务时,您可以使用集群的默认容量提供程序策略,也可以使用覆盖默认策略的容量提供程序策略。

当您在 AWS Fargate 上运行任务时,不需要创建或管理容量。您只需要将以下任一预定义容量提供程序与集群关联:

  • Fargate

  • Fargate Spot

在 AWS Fargate 容量提供程序上使用 Amazon ECS 使您能够将 Fargate 和 Fargate Spot 容量用于您的 Amazon ECS 任务。

使用 Fargate Spot,您可以按照与 Fargate 价格相比的折扣价格运行能够容忍中断的 Amazon ECS 任务。Fargate Spot 在备用计算容量上运行任务。当 AWS 需要恢复容量时,您的任务将被中断,并发出两分钟的警告。

当使用 Fargate 和 Fargate Spot 容量提供程序的任务停止时,任务状态更改事件会发送到 Amazon EventBridge。停止原因说明了原因。有关更多信息,请参阅 Amazon EC2 任务状态更改事件

集群可能同时包含 Fargate 容量提供程序和自动扩缩组容量提供程序。但是,容量提供程序策略只能包含 Fargate 容量提供程序或自动扩缩组容量提供程序,而不能同时包含两者。有关更多信息,请参阅自动扩缩组容量提供程序

使用容量提供程序时,请考虑以下因素:

  • 您必须将容量提供程序与集群关联,然后才能将其与容量提供程序策略关联。

  • 您最多可以为容量提供程序策略指定 20 个容量提供程序。

  • 使用自动扩缩组容量提供程序的服务无法更新为使用 Fargate 容量提供程序,反之亦然。

  • 在容量提供程序策略中,如果未在控制台中为容量提供程序指定 weight 值,则使用原定设置值 1。如果使用 API或 AWS CLI,则使用原定设置值 0

  • 如果在容量提供程序策略中指定了多个容量提供程序,则至少有一个容量提供程序的权重值必须大于零。任何权重为 0 的容量提供程序都不能用于放置任务。如果您在策略中指定的多个容量提供程序的权重全部为 0,则使用该容量提供程序策略的任何 RunTaskCreateService 操作都将失败。

  • 在容量提供程序策略中,只能有一个容量提供程序定义了基准值。如果未指定基准值,则使用默认设置值零。

  • 集群可能同时包含自动扩缩组容量提供程序和 Fargate 容量提供程序。但是,容量提供程序策略只能包含自动扩缩组容量提供程序或 Fargate 容量提供程序,而不能同时包含两者。

  • 集群可能包含使用两个容量提供程序和两种启动类型的服务和独立任务的组合。服务可以更新为使用容量提供程序策略而不是启动类型。但是在执行此操作时必须强制实施新部署。

Fargate Spot 终止通知

在需求极高的时期,Fargate Spot 容量可能会不可用。此操作可能会导致 Fargate Spot 任务被延迟。发生此情况时,Amazon ECS 服务会重试启动任务,直到所需容量变得可用为止。Fargate 不会将 Spot 容量替换为按需容量。

当使用 Fargate Spot 容量的任务因 Spot 中断而停止时,系统会在任务停止之前发送两分钟的警告。警告作为任务状态更改事件发送到 Amazon EventBridge 并作为 SIGTERM 信号发送到正在运行的任务。如果您在服务中使用 Fargate Spot,则在这种情况下,服务调度器将收到中断信号,并在有容量可用时尝试在 Fargate Spot 上启动额外任务。只有一个任务的服务将被中断,直到容量可用。有关正常关闭的更多信息,请参阅使用 ECS 进行正常关闭

为了确保容器在任务停止之前正常退出,您可以配置以下内容:

  • 可以在任务使用的容器定义中指定 120 秒或更小的 stopTimeout 值。默认 stopTimeout 值为 30 秒。您可以指定较长的 stopTimeout 值,为您在收到任务状态更改事件和强制停止容器的时间点之间留出更多时间。有关更多信息,请参阅 容器超时

  • 必须从容器内接收 SIGTERM 信号才能执行任何清理操作。未能处理此信号将导致任务在配置的 stopTimeout 后接收 SIGKILL 信号,并可能导致数据丢失或损坏。

下面是任务状态更改事件的代码段。此代码段显示停止原因和 Fargate Spot 中断的停止代码。

{ "version": "0", "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab", "detail-type": "ECS Task State Change", "source": "aws.ecs", "account": "111122223333", "resources": [ "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef" ], "detail": { "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default", "createdAt": "2016-12-06T16:41:05.702Z", "desiredStatus": "STOPPED", "lastStatus": "RUNNING", "stoppedReason": "Your Spot Task was interrupted.", "stopCode": "SpotInterruption", "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE", ... } }

以下是用于为 Amazon ECS 任务状态更改事件创建 EventBridge 规则的事件模式。您可以选择在 detail 字段中指定集群。这样做意味着您将收到该集群的任务状态更改事件。有关更多信息,请参阅 Amazon EventBridge 用户指南中的创建 EventBridge 规则

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Task State Change" ], "detail": { "clusterArn": [ "arn:aws:ecs:us-west-2:111122223333:cluster/default" ] } }