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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS Fargate 容量提供程序

利用 Amazon ECS 上的 AWS Fargate 容量提供程序,您可以在 Fargate 任务中同时使用 Fargate Spot 和 Amazon ECS 容量。有关容量提供程序的更多信息,请参阅Amazon ECS 容量提供程序.

利用 Fargate Spot,您可以按照与 Amazon ECS 价格相比的折扣价格运行能够容忍中断的 Fargate 任务。Fargate Spot 使用备用计算容量运行任务。当 AWS 需要恢复容量时,您的任务将被中断,并发出两分钟的警告。下文将进一步详细说明这一点。

Fargate 容量提供程序注意事项

使用 Fargate 容量提供程序时应考虑以下因素。

  • 无需创建 Fargate 和 Fargate Spot 容量提供程序。它们对所有账户都可用,只需要与集群关联即可供使用。

  • 要将 Fargate 和 Fargate Spot 容量提供程序与现有集群关联,您必须使用 Amazon ECS API 或 AWS CLI。有关更多信息,请参阅向现有集群添加Fargate容量提供程序.

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

  • 当使用控制台Amazon ECS以及集群模板创建新仅网络集群时, FARGATEFARGATE_SPOT 容量提供程序将自动与新集群关联。

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

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

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

处理Fargate Spot终止通知

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

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

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

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

以下是任务状态更改事件的一个代码段,显示了 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", ... } }

以下是用于为 EventBridge 任务状态更改事件创建 Amazon ECS 规则的事件模式。您可以有选择地在 detail 字段中指定一个群集,用于接收任务状态更改事件。有关更多信息,请参阅 中的创建 EventBridge Amazon EventBridge 用户指南规则

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

创建使用 Fargate 容量提供程序的新集群

创建新 Amazon ECS 集群时,您可以指定一个或多个与集群关联的容量提供程序。容量提供程序用于定义容量提供程序策略,该策略确定您的任务运行于的基础设施。

使用 时AWS 管理控制台, FARGATEFARGATE_SPOT 容量提供程序在使用集群模板时会自动与仅网络集群关联。有关更多信息,请参阅创建集群.

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

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

  • create-cluster (AWS CLI)

    aws ecs create-cluster \ --cluster-name FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT \ --region us-west-2

向现有集群添加Fargate容量提供程序

您可以使用 Amazon ECS API 更新现有PutClusterCapacityProviders集群的可用容量提供程序池。

Fargate 中不支持向现有集群添加 Fargate Spot 或 AWS 管理控制台. 容量提供程序。您必须在控制台中创建新 Fargate 集群,或使用 Fargate API 或 Fargate Spot 将 Amazon ECS 或 AWS CLI. 容量提供程序添加到现有集群。

将 Fargate 容量提供程序添加到现有集群 (AWS CLI)

使用以下命令将 Fargate 和 Fargate Spot 容量提供程序添加到现有集群。如果指定的集群具有关联的现有容量提供程序,则除了要添加的任何新容量提供程序之外,还必须指定所有现有容量提供程序。从 PutClusterCapacityProviders API 调用中省略的与集群关联的任何现有容量提供程序都将与集群取消关联。仅当现有容量提供程序未使用某个集群时,您才可以取消现有容量提供程序与该集群的关联。这些相同的规则适用于集群的默认容量提供程序策略。如果集群已定义现有默认容量提供程序策略,则它必须包含在 PutClusterCapacityProviders API 调用中。否则,它将被覆盖。

  • put-cluster-capacity-providers (AWS 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 容量提供程序运行任务或创建服务。如果未提供容量提供程序策略,则使用集群的默认容量提供程序策略。

Fargate中支持使用 Fargate Spot 或 AWS 管理控制台. 容量提供程序运行任务。如果使用Fargate,则必须将 Fargate Spot 或 AWS 管理控制台. 容量提供程序添加到集群的默认容量提供程序策略。使用 Amazon ECS API 或 AWS CLI 时,您可以指定容量提供程序策略或使用集群的默认容量提供程序策略。

使用 Fargate 容量提供程序 (AWS CLI)) 运行任务

通过以下命令使用 Fargate 和 Fargate Spot 容量提供程序运行任务。

  • run-task (AWS 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 容量提供程序 (AWS CLI)) 创建服务

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

  • create-service (AWS 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