

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Fargate 的 Amazon ECS 叢集
<a name="fargate-capacity-providers"></a>

使用 AWS Fargate 容量提供者的 Amazon ECS，您可以將 Fargate 和 Fargate Spot 容量與 Amazon ECS 任務搭配使用。

透過 Fargate Spot，您能以折扣價 (與 Fargate 價格相比) 執行可接受中斷的 Amazon ECS 任務。Fargate Spot 在備用運算容量上執行任務。當 AWS 需要恢復容量時，您的任務會因兩分鐘警告而中斷。

當使用 Fargate 和 Fargate Spot 容量提供者的任務停止時，系統會將任務狀態變更事件傳送至 Amazon EventBridge。停止原因說明其原因。如需詳細資訊，請參閱[Amazon ECS 任務狀態變更事件](ecs_task_events.md)。

叢集可以同時包含 Fargate 和 Auto Scaling 群組容量提供者。不過，容量提供者策略只能包含 Fargate 或 Auto Scaling 群組容量提供者，不能同時包含兩者。如需詳細資訊，請參閱 [Auto Scaling 群組容量提供者](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-auto-scaling.html#asg-capacity-providers)。

使用容量提供者時，請考慮下列事項：
+ 將容量提供者與容量提供者策略相關聯之前，必須先將容量提供者與叢集建立關聯。
+ 您最多可以為容量提供者策略指定 20 個容量提供者。
+ 您無法將使用 Auto Scaling 群組容量提供者的服務更新為使用 Fargate 容量提供者。反之亦然。
+ 在容量提供者策略中，如果沒有在主控台中對容量提供者指定 `weight` 值，則會使用預設值 `1`。如果使用 API 或 AWS CLI，`0`則會使用 的預設值。
+ 在容量提供者策略中指定多個容量提供者時，至少有一個容量提供者必須具有大於零的權重值。任何權重為零的容量提供者都不會用來置放任務。如果您在策略中指定多個容量提供者權重均為零，則使用容量提供者策略的任何 `RunTask` 或 `CreateService` 動作都會失敗。
+ 在容量提供者策略中，只有一個容量提供者已定義*基準*值。如果未指定基準值，則會使用預設值零。
+ 叢集可以同時包含 Auto Scaling 群組容量提供者以及 Fargate 容量提供者。不過，容量提供者策略只能包含 Auto Scaling 群組或 Fargate 容量提供者，不能同時包含兩者。
+ 一個叢集可以包含同時使用這兩種容量提供者的服務與獨立任務。服務可以更新為使用容量提供者策略，而非啟動類型。不過，若要執行此操作，您必須強制執行新部署。

## Fargate Spot 終止通知
<a name="fargate-capacity-providers-termination"></a>

在需求極高期間，Fargate Spot 容量可能無法使用。這可能會導致 Fargate Spot 任務延遲。發生此狀況時，Amazon ECS 服務會重試啟動任務，直到所需的容量可用為止。Fargate 不會以隨需容量取代 Spot 容量。

當使用 Fargate Spot 容量的任務因 Spot 中斷而停止時，在任務停止之前會傳送兩分鐘的警告。警告會以任務狀態變更事件的形式傳送至 Amazon EventBridge，並作為 SIGTERM 訊號傳送給正在執行的任務。如果您使用 Fargate Spot 作為服務的一部分，在此情況中，服務排程器會收到中斷訊號，並嘗試在容量可用時啟動其他任務。只有一項任務的服務會中斷，直到容量可用為止。如需正常關機的詳細資訊，請參閱[使用 ECS 正常關機](https://aws.amazon.com/blogs/containers/graceful-shutdowns-with-ecs/)。

若要確保您的容器在任務停止之前正常結束，可設定下列項目：
+ 您可以在任務所使用的容器定義中指定 `120` 秒數的 `stopTimeout` 值 (或更少)。預設 `stopTimeout` 值為 30 秒。您可以指定更長的 `stopTimeout` 值，讓您從收到任務狀態變更事件到容器強制停止之間有更多時間。如需詳細資訊，請參閱[容器逾時](task_definition_parameters.md#container_definition_timeout)。
+ 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` 欄位中指定叢集。若指定，則表示您會收到該叢集的任務狀態變更事件。如需有關建立 EventBridge 規則的詳細資訊，請參閱 *Amazon EventBridge User Guide* 中的 [Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html)。

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