

# Fargate 用の Amazon ECS クラスター
<a name="fargate-capacity-providers"></a>

AWS Fargate キャパシティプロバイダーで Amazon ECS を使用すると、Amazon ECS タスクで Fargate と Fargate Spot キャパシティの両方を使用できます。

Fargate Spot を使用すると、割り込み許容のある Amazon ECS タスクを、Fargate 料金と比較して割引料金で実行できます。Fargate Spot は、予備のコンピュートキャパシティーでタスクを実行します。AWS がキャパシティを戻す必要がある場合、タスクは中断され、2 分間の警告が表示されます。

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` のデフォルト値が使用されます。
+ キャパシティプロバイダー戦略内で複数のキャパシティプロバイダーを指定する場合、少なくとも 1 つのキャパシティプロバイダーのウェイト値が 0 より大きい必要があります。ウェイトが 0 のキャパシティープロバイダーはタスクの配置に使用されません。戦略に複数のキャパシティプロバイダーを指定し、すべて同じウェイトを 0 にした場合、キャパシティプロバイダー戦略を使用する `RunTask` または `CreateService` のアクションは失敗します。
+ キャパシティプロバイダー戦略では、1 つのキャパシティプロバイダーのみが定義された*ベース*値を持つことができます。ベース値を指定しない場合は、デフォルト値の 0 が使用されます。
+ クラスターには、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 キャパシティーを使用するタスクが停止すると、タスクが停止する前に 2 分間の警告が送信されます。警告は、タスク状態変更イベントとして Amazon EventBridge に送信され、実行中のタスクに SIGTERM シグナルとして送信されます。サービスの一部として Fargate Spot を使用する場合、このシナリオでは、サービススケジューラは中断信号を受信し、利用可能なキャパシティがあれば Fargate Spot で追加のタスクを起動しようとします。タスクが 1 つしかないサービスは、キャパシティが利用可能になるまで中断されます。正常なシャットダウンの詳細については、「[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 ユーザーガイド*」の「[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}}"
        ]
    }
}
```