tl;dr
昨年の re:Invent でリリースされた Fargate Spot というサービス. ECS Fargate を通常の最大 70% オフの価格で利用出来るということで, ギョームで利用すべくドキュメントを斜め読みしたり既存のクラスタに適用してみたりしましたのでメモっておきます.
Fargate Spot をざっくりと理解する
ドキュメント斜め読み
ドキュメントをざっとななめ読みしてみました.

- クラスタにつき 6 つまでのキャパシティプロバイダを設定出来る
- 各キャパシティプロバイダには
BaseとWeightでタスクの数を設定するBaseは最低限動かしたいタスクの数を指定 (すべてのプロバイダの中で 1 つのプロバイダのみ指定が可能)WeightにはBaseの数を超えたタスクをどのように追加するかを指定する
などなど. 終了通知等については, スポットインスタンスと同じような感じです.
Base と Weight が分かりづらい
例えば, 以下のような戦略があった場合.
| 戦略 | Base | Weight |
|---|---|---|
| FARGATE_SPOT | 1 | 2 |
| FARGATE | 1 |
Baseで 1 が指定されているので, まず 1 タスクは Fargate Spot で起動する- タスク追加される場合, Fargate Spot で 2 , Fargate で 1 の割合でタスクが起動することになる
さらに, 以下のような戦略があった場合,
| 戦略 | Base | Weight |
|---|---|---|
| FARGATE_SPOT | 1 | 1 |
| FARGATE | 1 |
Baseは上記の例と同様に Fargate Spot で 1 つ起動- タスクが追加された場合, Fargate Spot で 1 , Fargate で 1 の割合でタスクが起動することになる
- 尚, タスクが 1 つ追加された場合, Fargate から優先的に追加される (ってどこかに書いてあったけど見失った)
稼働中のクラスタで動作確認
マネジメントコンソールからだと操作出来ない
- 残念
既存のクラスタに対してキャパシティプロバイダを設定
以下のようにキャパシティプロバイダを設定します.
$ aws ecs put-cluster-capacity-providers \ --cluster ${CLUSTER_NAME} \ --capacity-providers FARGATE FARGATE_SPOT \ --default-capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1,base=1 capacityProvider=FARGATE,weight=1
- キャパシティプロバイダとして FARGATE と FARGATE_SPOT を設定
- キャパシティ戦略として以下のように設定
- FARGATE_SPOT
- Base: 1
- Weight: 1
- FARGATE
- Base: 0
- Weight: 1
- FARGATE_SPOT
マネジメントコンソールで確認することが可能です. キャパシティプロバイダー という項目が増えています.

クラスターの更新 をポチッとなっとすると...

RunTask
以下のように通常の run-task に --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 オプションを付与して実行します.
$ cat test.json { "containerOverrides": [ { "name": "mytask", "command": ["sh", "test.sh"] } ] } $ aws ecs run-task \ --region ap-northeast-1 \ --cluster ${CLUSTER_NAME} \ --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \ --task-definition ${TASK_DEFINITION_NAME}:${REVISION} \ --overrides file://test.json \ --query 'tasks[].taskArn' \ --network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxxxxx,subnet-yyyyyyyy],securityGroups=[sg-zzzzzzzz],assignPublicIp=ENABLED}" \ --output text
以下のようにキャパシティプロバイダーが FARGATE_SPOT を利用してタスクが起動していることがわかります.

以上
Fargate Spot についてザクッと調べて, ザクッと触ってみました. Base と Weight についてまだ理解が追いついておらず, まだまだトライが必要な感じです.