皆さん、AWS Fargate Spot使ってますか? 最近Arm向けもサポートされてより活用範囲が広がっているかと思います。
さて、Fargete SpotはFargateのコンピューティングリソースの状況次第でタスクが中断される代わりに、最大通常の7割引きでタスクを実行できる機能です。
とはいえ、できることなら中断はされたくないですよね。
ここに「ある1ヶ月のFargate Spotの中断回数のグラフ」があります*1。何となく中断具合に周期性がありそうですね。
グッとにらむとこうなりました。
明らかに日曜日近辺の中断回数が少ないです。
つまり? 中断されたくないタスクをFargate Spotで動かすには土日が狙い目です*2。
この記事は id:koudenpa が書きました。
オマケ
Fargate Spotの中断回数はメトリクスとしては提供されていないため、Amazon ECS タスク状態変更イベントを元に以下のようなLambda関数でCloudWatchにプロットしています。Spotタスクを運用するに当たって、中断傾向を把握するために参照しています。
import { CloudWatchClient, PutMetricDataCommand } from "@aws-sdk/client-cloudwatch"; const cloudwatch = new CloudWatchClient(); export const handler = async (event) => { const detail = event.detail; console.log(event); if (detail.lastStatus === 'STOPPED' && detail.stoppedReason) { // stoppedReason: 'Your Spot Task was interrupted.', if (detail.stoppedReason.includes('Spot')) { const params = { Namespace: 'ECS/Fargate', MetricData: [ { MetricName: 'SpotInterruptions', Value: 1, Unit: 'Count' }, ] }; const command = new PutMetricDataCommand(params); await cloudwatch.send(command); } } };
この記事を書くに当たって少し検索したところ、イベントをLogsに出力し、それを集計している例がありました。こちらの方がより汎用的でよさそうですね。