AWS上でバッチ処理を行う場合に、
- どのAWSサービスが選択肢として考えられるか
- どのAWSサービスを選択すればいいのか
について考えていきます。
AWSでバッチ処理・定期実行する方法を4つ紹介し、それぞれ特徴やメリットとデメリットがありますので、この点について記載していきます。
バッチ処理・定期実行方式のパターンと特徴を知って適切な手段を選択しよう!という記事です。
まずはどのような構築方法があるかについて記載していきます。
4つのバッチ処理・定期実行方式
バッチ処理・定期実行方式は以下の4つを想定しています。
起動方式 | 使用するAWSサービス | 概要 |
EC2 | EC2 | Linux系OSで用いられる定時実行機能であるcronのコマンドを使用する |
SQS×ECS | EventBridge SQS ECS | EventBridgeでキューを生成し、ECSコンテナでキューを取得して実行する |
ECSタスクスケジューリング | ECS | ECSタスクスケジューリングを利用して、コンテナを起動して実行する |
Lambda | EventBridge Lambda | EventBridgeからLambdaを起動し、実行する |
4つのバッチ処理・定期実行方式の詳細情報
それぞれのバッチ処理・定期実行方式について詳細を見ていきます。
EC2について
使用するAWSサービス
EC2
処理概要
Linux系OSで用いられる定時実行機能であるcronのコマンドを使用する
メリット
昔からよく使われているcronの知識が使える
デメリット
EC2インスタンスを起動しておく必要があり、使っていない時間もコストがかかる
障害に弱い。EC2サーバに障害があると終わる
EC2にも、EventBridgeをトリガーにStep Functionsを起動して、EC2のバッチを実行する方法もあるので、気になる方は以下のリンクをクリックくださーい
SQS×ECS
使用するAWSサービス
EventBridge
SQS
ECS
処理概要
EventBridgeでキューを生成。ECSコンテナでキューを取得して実行する
メリット
ECSを起動しておくため、コンテナの起動時間を要さない。
デメリット
EventBridgeでキューを生成するが、EventBridgeはまれに1 つのイベントに対して複数回トリガーされることもあるので要注意(1つの設定で複数キューが生成されることがある)
(多重起動対策をプログラムでしておく必要がある)
ECSを起動しておく必要があり、使っていない時間もコストがかかる
ECS タスクスケジューリング
使用するAWSサービス
ECS
処理概要
ECS タスクスケジューリングを利用して、コンテナを起動して実行する
メリット
処理実行時のみコンテナを立ち上げるので、無駄なコストが発生しない
デメリット
コンテナが起動するまでに時間がかかる。(ECS タスクスケジューリングが動き出してから実際にバッチが実行されるまでタイムラグがある)
1つのECS タスクスケジューリング設定で、複数コンテナが立ち上がってしまうことがあるため、多重起動対策をプログラムでしておく必要がある
Lambda
使用するAWSサービス
EventBridge
Lambda
処理概要
EventBridgeからLambdaを起動し、バッチ処理を開始する
メリット
コールドスタートの問題はあるが、比較的低レイテンシーで処理を開始できる。
デメリット
Lambdaには15分でタイムアウトする制限があるので、長時間実行のバッチ起動処理には向かない
どのサービスを使えばよいか
バッチ処理開始までに多少の遅延があっても許容される場合
「ECS タスクスケジューリング」を使用するのがいいと思われます。
デメリットの「コンテナが起動するまでに時間がかかる」が許容されるためです。
バッチ処理開始までの遅延が許容されない、かつ、バッチ処理時間が15分を超える
「SQS×ECS」を使用するのがいいです。
消去法です。
バッチ処理開始までの遅延が許容されない、かつ、バッチ処理時間が15分を超えない
遅延が少なく、実行時だけ課金される「Lambda」を選択します。
女性誌多数掲載!普通の子に会える
まとめ
AWS でバッチ・定期実行する際の方式について記載しました。
AWSはサービスがいっぱいあり、バッチ実行時にどのサービスを使えばいいか迷うことも多いと思いますが、迷った時は本記事の「どのサービスを使えばよいか」が参考になると嬉しいです。
WEBサイト構築についての記事もありますので、よろしければ★