あるデータエンジニアリングチームは、AWS Batchを使用して数時間かかる大規模なデータ変換ジョブを実行しています。コスト削減のためスポットインスタンスを使用していますが、スポットインターラプション(スポットインスタンスの中断)によって断続的にジョブが失敗しています。 チームは以下の要件を満たしたいと考えています。 ・スポットインターラプションによる失敗時にジョブを最大3回まで自動的にリトライする ・3回リトライしてもすべて失敗した場合はジョブをFAILED状態にして停止する ・追加のAWSサービスや独自のモニタリングコードを不要にする 最も適切な方法はどれですか?
AWS Batchのジョブ定義にはRetryStrategyが組み込まれており、attemptsに最大10までの値を設定するだけで自動リトライが有効になります。さらにevaluateOnExitを使用して終了コードやステータス理由に基づいた条件分岐を定義することで、スポットインターラプションなどのインフラ起因の失敗のみリトライし、アプリケーションエラーでは即座に停止するなど細かい制御も可能です。追加のAWSサービスは一切不要で要件を完全に満たします。 選択肢BのStep Functionsステートマシンは要件は満たせますが、リトライ制御のためだけにStep Functionsを導入するのは過剰設計であり「追加サービスを不要にする」要件に反します。 選択肢CのEventBridge+Lambda+DynamoDBの組み合わせは機能的には可能ですが実装が非常に複雑でコストも増加し、Batchのネイティブ機能で解決できる場合には不適切です。 選択肢Dのインスタンスタイプ最適化はスポット中断率を下げる効果はありますが、自動リトライの仕組みとは無関係であり要件を満たしません。