Amazon Fargate 容量提供程序
在 Amazon Fargate 容量提供程序上使用 Amazon ECS 使您能够将 Fargate 和 Fargate Spot 容量用于您的 Amazon ECS 任务。有关容量提供程序的更多信息,请参阅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和 Fargate Spot 容量提供程序是预留的,无法删除。不过,您可以使用
PutClusterCapacityProviders
API 操作断开它们与集群的关联。 -
当使用 Amazon ECS 经典控制台和仅限联网集群模板创建新集群时,
FARGATE
和FARGATE_SPOT
容量提供程序将自动与新集群关联。 -
如果您使用 Fargate Spot,则任务必须使用平台版本 1.3.0 或更高版本(对于 Linux)。有关更多信息,请参阅Amazon Fargate 平台版本。
-
当使用 Fargate 和 Fargate Spot 容量提供程序的任务停止时,任务状态更改事件会发送到 Amazon EventBridge。停止原因说明了原因。有关更多信息,请参阅任务状态更改事件。
-
集群可能同时包含 Fargate 容量提供程序和自动扩缩组容量提供程序。但是,容量提供程序策略只能包含 Fargate 容量提供程序或自动扩缩组容量提供程序,而不能同时包含两者。有关更多信息,请参阅 Amazon Elastic Container Service 开发人员指南中的自动扩缩组容量提供程序。
处理 Fargate Spot 终止通知
当使用 Fargate Spot 容量的任务因 Spot 中断而停止时,系统会在任务停止之前发送两分钟的警告。警告作为任务状态更改事件发送到 Amazon EventBridge 并作为 SIGTERM 信号发送到正在运行的任务。如果您在服务中使用 Fargate Spot,则在这种情况下,服务调度器将收到中断信号,并在有容量可用时尝试在 Fargate Spot 上启动额外任务。只有一个任务的服务将被中断,直到容量可用。
为了确保容器在任务停止之前正常退出,可以配置以下内容:
-
可以在任务使用的容器定义中指定
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": "TerminationNotice", "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
" ] } }
创建使用 Fargate 容量提供程序的新集群
创建新 Amazon ECS 集群时,您可以指定一个或多个与集群关联的容量提供程序。容量提供程序用于定义容量提供程序策略,该策略确定任务运行的基础设施。
如果您使用 Amazon Web Services Management Console 进行设置并使用仅限联网集群模板,则 FARGATE
和 FARGATE_SPOT
容量提供程序将自动与集群关联。有关更多信息,请参阅使用经典控制台创建集群。
要使用 Fargate 容量提供程序创建Amazon ECS群集 (Amazon CLI)
使用以下命令创建新集群,并将 Fargate 和 Fargate Spot 容量提供程序与其关联。
-
create-cluster (Amazon CLI)
aws ecs create-cluster \ --cluster-name
FargateCluster
\ --capacity-providers FARGATE FARGATE_SPOT \ --regionus-west-2
向现有集群添加 Fargate 容量提供程序
您可以使用 PutClusterCapacityProviders
API 操作更新现有 Amazon ECS 集群的可用容量提供程序池。
Amazon Web Services Management Console 中不支持向现有集群添加 Fargate 或 Fargate Spot 容量提供程序。您必须在控制台中创建新的 Fargate 集群,或者使用 Amazon ECS API 或 Amazon CLI 将 Fargate 或 Fargate Spot 容量提供程序添加到现有集群。
将 Fargate 容量提供程序添加到现有集群 (Amazon CLI)
使用以下命令将 Fargate 和 Fargate Spot 容量提供程序添加到现有集群。如果指定的集群具有关联的现有容量提供程序,则除了要添加的任何新容量提供程序之外,还必须指定所有现有容量提供程序。与 PutClusterCapacityProviders
API 调用中忽略的集群关联的任何现有容量提供程序都将与集群取消关联。仅当现有容量提供程序未使用某个集群时,您才可以取消现有容量提供程序与该集群的关联。这些相同的规则适用于集群的默认容量提供程序策略。如果集群已定义现有的默认容量提供程序策略,则必须将其包括在 PutClusterCapacityProviders
API 调用中。否则,它将被覆盖。
-
put-cluster-capacity-providers (Amazon CLI)
aws ecs put-cluster-capacity-providers \ --cluster
FargateCluster
\ --capacity-providers FARGATE FARGATE_SPOTexisting_capacity_provider1
existing_capacity_provider2
\ --default-capacity-provider-strategyexisting_default_capacity_provider_strategy
\ --regionus-west-2
使用 Fargate 容量提供程序运行任务
您可以通过指定容量提供程序策略,使用 Fargate 或 Fargate Spot 容量提供程序运行任务或创建服务。如果未提供容量提供程序策略,则使用集群的默认容量提供程序策略。
在 Amazon Web Services Management Console 中支持使用 Fargate 或 Fargate Spot 容量提供程序运行任务。如果使用 Amazon Web Services Management Console,则必须将 Fargate 或 Fargate Spot 容量提供程序添加到群集的原定设置容量提供程序策略中。。使用 Amazon ECS API 或 Amazon CLI 时,您可以指定容量提供程序策略或使用集群的原定设置容量提供程序策略。
要使用 Fargate 容量提供程序 (Amazon CLI) 运行任务
通过以下命令使用 Fargate 和 Fargate Spot 容量提供程序运行任务。
-
run-task (Amazon CLI)
aws ecs run-task \ --capacity-provider-strategy capacityProvider=
FARGATE
,weight=1
capacityProvider=FARGATE_SPOT
,weight=1
\ --clusterFargateCluster
\ --task-definitiontask-def-family:revision
\ --network-configuration "awsvpcConfiguration={subnets=[string
,string
],securityGroups=[string
,string
],assignPublicIp=string
}" \ --countinteger
\ --regionus-west-2
注意
使用 Fargate Spot 运行独立任务时,请务必注意,任务可能会在完成和退出之前中断。因此,当应用程序收到 SIGTERM 信号并能够恢复时,您必须在 2 分钟内稳妥地退出应用程序。有关更多信息,请参阅处理 Fargate Spot 终止通知。