バッチ処理とは、開始から終了まで人手を介さない自動処理をいいます。またバッチ処理の世界では、処理をジョブと呼びます。
バッチ処理は考慮すべきことがいろいろあります。例えば実行待ちになったジョブをどんな順番に実行するか、また実行中にリソース不足になった場合どうするか、などなど。特にクラウド環境下のバッチ処理は従来のオンプレミスのバッチ処理とは異なり、クラウドに最適なバッチ設計が求められます。
その「クラウド時代に最適なバッチ処理」が、今回解説するAWS Batchです。
AWS Batchとは
バッチ処理とは一般的に、設計者が処理を定義し、決めた時間から決めた順番に実行します。しかし本記事であつかうバッチ処理とは、ユーザー自身がジョブを投入して実行させる形態を指します。
ジョブは即時実行して短時間で終われば問題ありません。しかし実行に時間のかかるジョブがたまれば、どうしても「待ち」が発生します。
例えて言えば
ここでちょっとたとえ話です。
あなたはファーストフード店で注文をしようとしています。他に客がいなければ即時に注文できます。ところがすでに多数の客が並んでいれば、なかなか注文できませんよね。
または前の人が多数かつ持ち帰りの注文をしていたらどうでしょうか?店員は品物を用意するだけでなく袋詰めまでするので、あなたに順番はなかなか回ってきません。しかし他の店員が他のレジに入れば、あなたの対応をしてくれます。
この例において、
- 客の注文がジョブ
- 店員のさばきがジョブの実行
- 行列の末尾に新たな客が並ぶことをキューイング
- 空いている店員に客を割振ることをディスパッチ
といいます。以降の解説でこの用語を使いますので、覚えておいてください。
やっと本題「AWS Batchとは」
AWS Batchとは、利用者がジョブをキューイングし、それを順番や効率を考えた上で実行してくれる仕組みです。AWS Batchは単にジョブを実行するだけでなく、高負荷時には自動的にリソースを追加してディスパッチし、負荷が下がればリソースを解放します。
AWS Batchは、他のAWSのさまざまなサービスをコントロールできます。例えばEC2のインスタンスです。負荷が高まれば自動的にインスタンスを追加してディスパッチし、負荷が下がれば元に戻してくれます。
その他さまざまなサービスと連携できるのは、AWS Batchならではの機能です。
AWS Batchのメリット
AWS Batchとオンプレミスでのバッチ処理と比較した場合、何が異なるのか、何がメリットなのかを解説します。
リソースを動的に変更可能
オンプレミス環境でのバッチ処理設計は、設計上の最大の負荷にも耐えられるように行います。つまり高負荷でないときはリソースを持て余してしまいます。ところがAWS Batchは、前述のように必要最低限だけリソースを準備しておき、負荷に応じてリソースを追加します。
つまり、リソースにかけるコストを最適化できるわけです。
追加のミドルウェアが不要
AWS BatchはAWSのサービスの1つです。AWSマネジメントコンソールから設定するだけで使用可能なので、何かをインストールする必要はありません。導入のノウハウは不要です。
ダウンしない
前述のメリットと若干重複しますが、動的にリソースが変化するので、負荷がかかりすぎてダウンするということがありません。オンプレミスなら、リソースが枯渇してしまうとハード自体がダウンしてしまうことがありますよね。AWS Batchはその点安心です。
AWS Batchでできること
すでに述べたこと以外で、AWS Batchは何ができるのかを解説します。
ジョブ間の依存関係
AWS Batchは一般的なバッチ処理実行ミドルウェアのように、複数のジョブ間の依存関係をつけることができます。あるジョブが終わったら次のジョブ、といった感じです。
優先順位を自動的に評価
AWS Batchはジョブを都度評価し、リソースに最適なジョブの実行順を決定してくれます。何も考えずに多数のジョブを投入しても、AWS Batchがバッチの優先度や負荷を評価して順位付けまでしてくれます。
モニタリング、ロギング
AWS Batchは、AWS CloudWatchとの連携ができます。つまり、処理の実行状況やログ収集はCloudWatchがやってくれるので、別途スクリプトを組んでログを吐き出して・・・といったことが不要です。
料金
無料です!
費用が発生するのは、あくまでAWS Batchが使ったEC2などの他のサービスに対してであり、AWS Watch自体には料金はかかりません。
始め方
では実際にジョブの投入をやってみましょう。
AWS Batchは標準で「echo helloworld」を実行できるようになっています。超シンプルにそれでいきましょう。また、解説では重要ではないところは割愛させていただきます。
まずはジョブの定義です。今回はジョブの実行までするので「Amazon EC2 の使用」を選びます。
今回はコマンドを実行してみます。最初から入力されているhello worldをありがたく使いましょう。
CPU数、メモリなどを選びます。
コマンドへの引数なども設定できます。今回は設定せず、そのまま次へと進みます。以降は、最低CPU数や最高CPU数、実行するVPCなどを設定します。
終わりましたね。
「ダッシュボード」ボタンを押してみましょう。
投入したジョブは左から順に進んでいきます。最初はSUBMITTEDでしたが、この画面コピーを取得したときはSTARTINGでした。
最終的にSUCCEEDまできました(もともと2だったので、今回投入したジョブが完了して3になっています)。
実行結果はCloudWatchで行います。
当該ジョブの実行結果を見てみましょう。
コマンドの実行結果「hello world」が表示されているのはお分かりでしょうか?
ジョブの投入から実行結果の確認までやってみました。
まとめ
本記事では、AWS Batchの解説をしました。
IAMによる細かなセキュリティ設定等々、AWS Batchは本当に多機能です。ご紹介できたのはほんの一部にすぎません。
同じような処理を毎回繰り返す、そんな方はぜひAWS Batchの導入を検討してみてくださいね!