Ashigaruコンピューター道

ソフトウェアの話とか、キャリアの話とか

AWS Batchでの起動時間について

概要

新規プロダクト作成において、非同期にデータ収集、加工処理をする必要がありAWS Batchの検討をしたが、起動時間 が問題で使用できなかったのでその情報を残しておく。

AWS Batchとは

フルマネージドのバッチ処理基盤

aws.amazon.com

キューとセットになっているので、SQSを組み合わせたりする必要がなく、ここにjobを放り込むとキュー管理、実行までやってくれる。 裏側としてはEC2が使われているらしく、

想定使用用途

Webサービスからの依頼で、データの収集、加工、送付をしてくれる非同期処理を作成したい。 作成されるデータ量的には5MB - 10MBぐらいでまあ長くても数分で終わる処理想定。

問題点

ダミーのコンテナを作って、動かして見たが処理開始までの起動時間がネックになってきた。 大体はキューを積んでから数十秒以内にrunnable -> starting -> runningとステータスが遷移して、処理されるのだが たまに、runnableのまま数分放置される場合がある。runningしている処理がないにも関わらずだ。

runningなにもない状態 f:id:jjjjpppp25:20181006102529p:plain

startingも何もない状態 f:id:jjjjpppp25:20181006102602p:plain

しかしrunnbableにはたくさんキューがある f:id:jjjjpppp25:20181006102645p:plain

数分待つと。。。

処理が開始される。キューが積まれてから処理開始まで8分かかっている。 f:id:jjjjpppp25:20181006102751p:plain

代案

数分で終わる処理において、数分待たされるのはシステム要件的に許されなそうなので以下構成の方が良さそう。 この構成にすると SQSにキューを積むとほぼ同時にlambda functionが起動するので、あとはコンテナを立ち上げる時間だけ。 なんどやっても1分ほどで起動開始されていた。

f:id:jjjjpppp25:20181006104807p:plain