Amazon Fargate 容量提供程序 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon Fargate 容量提供程序

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

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

Fargate 容量提供程序注意事项

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

  • Fargate 上的 Windows 容器不支持 Fargate Spot 容量提供程序。

  • 使用 ARM64 架构的 Linux 任务不支持 Fargate Spot 容量提供程序。Fargate Spot 仅支持具有 X86_64 架构的 Linux 任务。

  • 无需创建 Fargate 和 Fargate Spot 容量提供程序。它们适用于所有账户。要使用这些容量提供程序,您只需将其与集群关联即可。

  • 要将 Fargate 和 Fargate Spot 容量提供程序与现有集群关联,您必须使用 Amazon ECS API 或 Amazon CLI。您无法使用控制台将其关联。

  • Fargate和 Fargate Spot 容量提供程序是预留的,无法删除。不过,您可以使用 PutClusterCapacityProviders API 操作断开它们与集群的关联。

  • 您也可以使用 PutClusterCapacityProviders API 操作将容量提供程序与现有集群关联。

  • 如果您使用 Fargate Spot,则任务必须使用平台版本 1.3.0 或更高版本(对于 Linux)。有关更多信息,请参阅 Fargate Linux 平台版本

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

  • 集群可能同时包含 Fargate 容量提供程序和自动扩缩组容量提供程序。但是,容量提供程序策略只能包含 Fargate 容量提供程序或自动扩缩组容量提供程序,而不能同时包含两者。有关更多信息,请参阅 Amazon Elastic Container Service 开发人员指南中的自动扩缩组容量提供程序

处理 Fargate Spot 终止通知

请理解以下结果,因为 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" ] } }