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

Amazon Fargate 容量提供程序

Amazon Fargate 容量提供程序使您能够将 Amazon ECS 和 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 经典控制台和仅联网集群模板创建新集群时,FARGATEFARGATE_SPOT 容量提供程序将自动与新集群关联。

  • 使用 Fargate Spot 要求您的任务使用平台版本 1.3.0 或更高版本(用于 Linux)。有关更多信息,请参阅Amazon Fargate 平台版本

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

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

处理 Fargate Spot 终止通知

当使用 Fargate Spot 容量的任务因 Spot 中断而停止时,系统会在任务停止之前发送两分钟的警告。警告作为任务状态更改事件发送到 Amazon EventBridge 并向正在运行的任务发送 SIGTERM 信号。作为服务的一部分使用 Fargate Spot 时,服务计划程序将收到中断信号,并在容量可用时尝试在 Fargate Spot 上启动额外任务。只有一个任务的服务将被中断,直到容量可用。

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

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

  • 必须从容器内接收 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 时,FARGATEFARGATE_SPOT 容量提供程序在使用 Networking Only (仅联网) 集群模板时会自动与集群关联。有关更多信息,请参阅使用经典控制台创建集群

要使用 Fargate 容量提供程序创建Amazon ECS群集 (Amazon CLI)

使用以下命令创建新集群,并将 Fargate 和 Fargate Spot 容量提供程序与其关联。

  • create-cluster (Amazon CLI)

    aws ecs create-cluster \ --cluster-name FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT \ --region us-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_SPOT existing_capacity_provider1 existing_capacity_provider2 \ --default-capacity-provider-strategy existing_default_capacity_provider_strategy \ --region us-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 \ --cluster FargateCluster \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --count integer \ --region us-west-2
注意

使用 Fargate Spot 运行独立任务时,请务必注意,任务可能会在完成和退出之前中断。因此,当应用程序收到 SIGTERM 信号并能够恢复时,您必须在 2 分钟内优雅地退出应用程序。有关更多信息,请参阅处理 Fargate Spot 终止通知

使用 Fargate 容量提供程序 (Amazon CLI) 创建服务

通过以下命令使用 Fargate 和 Fargate Spot 容量提供程序创建服务。

  • create-service (Amazon CLI)

    aws ecs create-service \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --service-name FargateService \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --desired-count integer \ --region us-west-2