AWS Fargate Spot が中断されにくいのはいつ?

皆さん、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に出力し、それを集計している例がありました。こちらの方がより汎用的でよさそうですね。

dev.classmethod.jp

*1:ap-northeast-1、X86_64のものです。Armでは傾向が変わるかもしれません。

*2:一般論としては中断されたくないタスクはSpotではなくオンデマンドタスクで動かします。その旨がAWSのドキュメントにも案内があります。