概要
AWSでバッチ処理をしたいとき、
AWSではどのサービスを使えば実現できるのか。
それぞれを簡単なサンプルで使いやすさを比較してみます。
バッチ処理が出来そうなサービス
Step Functions
概要
・Lambdaの処理の流れを可視化し、分岐や順序が意図した動作をしているか、確認をしながらバッチを構築していくことができる。
・ワークフローをjsonで定義する
・基本的にLambdaでできることに限る
特徴
・既存のLambdaがそのまま呼び出せる
・リトライ処理や分岐の設計が容易
・ほとんどの場合でEC2より安価(24hほとんど動いているような処理は割高なことも
アンチパターン
・一回の処理時間が長い(Lambdaは5分でタイムアウトしてしまうため
・重い処理の実行
・特殊なミドルウェアが絡むような処理はそもそもできない
ユースケース
・新規でAWS上にバッチ処理を作る場合
・汎用的な複数の処理を組み合わせるような場合
・短時間で終わる軽い処理
AWS Batch
概要
・負荷の高いジョブを効率よく実行するサービス
・事前に定義したDockerイメージの実行
特徴
・負荷に応じて自動でスケールする
・dockerに乗る処理であれば何でもできる
アンチパターン
・軽い処理(毎回インスタンスが起動してしまう
・頻繁に実行する処理
ユースケース
・シミュレーション
・データ解析
・並列実行できる処理
実際に動かしてみる
Step Functionsを動かしてみる
AWS Batchを動かしてみる
使い分けの方針
新規のバッチであれば、まずはStep Functionsで作れないか検討することが良さそうです。
既存からの移行であったとしても、「Batchでなければ動かせない」ものでなければ、
Step Functionsへの移行を検討してみても良さそうです。
Step FunctionsとBatchの双方をゼロから触った印象としては、
BatchはDocker・ECR・Code Commit等 Batch以外にも学習が必要です。
規模にもよるとは思いますが、既存のバッチをそのままAWS Batchに移行するのも、
Step Functionsで新規構築するのも、
全てにかかる時間を考えるとそれほど差はないと思えます。