AWS Batch とは何か

 AWS AWS-Batch Docker ハンズオン
2017.03.02

AWS re:Invent 2016 で発表された AWS Batch。 語感から、誤解されるサービス No.1 な気がします。 定時バッチなどとは何がどう違うのかをメモ。

 

機能概要

以下公式資料とドキュメント、実際さわってみた所感を合わせて。

結局何なのか

科学技術計算・ハイパフォーマンスコンピューティング用途で真価を発揮する、 大規模なスケール、ジョブの依存定義 が可能なマネージド 並列分散 処理基盤。

主な機能、ポイント

これがマネージドされると僕らは何がうれしいのか

逆に現在4サポートしていないこと

以下 API を駆使してプログラムは書けるものの、標準機能にはありません。

定時バッチのマネージドサービスではないよという話

再掲:「AWS Black Belt Online Seminar 2017 AWS Batch」10 ページ目 https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-aws-batch/10

ストリーミングではなく、(本来の意味の)バッチ的に渡ってくるタスクを スケーラブルに並列処理させるための仕組みとのことです。

ユースケース

公式

以下からも明らかに主なターゲットはシミュレーションやデータ解析のための処理。 変数を変えながら大量に流す処理細切れにして並列に流せる処理 が向いている。

公式(番外編)

膨大なパラメタを探索したり、予め大量の画像に推論したラベルを貼るといった 昨今話題となっている深層学習分野にも有用、今後利用は広がりそう。

個人的印象

上の深層学習の例では API 消費にレートリミットをかけるという位置付けで AWS Batch を使っていますが、この使い方はとても汎用的だと思います。 ということで、以下あたりも向いていそう。

例えば同時に流してよい処理がクラスタ全体で一つだけであるとか、 3 つ程度にしたいといった時にクラスタとジョブの定義だけで調整可能。

科学技術計算といった高度なものではなく、もっとシンプルなタスク。 Web / スマホアプリでも定期的に必要になる小さなジョブなども 予め Docker イメージになっているようであればすぐ使えて便利。

リソースの管理とジョブのスケジューリング

業界によって意味の異なる言葉の整理。

HPC 界隈、コンテナ(Web)界隈、業務システム界隈それぞれで 少しずつ意味が異なるようなので、比較しながら併記します。 (AWS Batch での意味 = HPC 分野での意味)

クラスタ、リソース管理

AWS Batch のいうクラスタは、将来的には HPC 方向に機能強化されるはず・・

スケジューラ

AWS Batch の概念・機能

コンピューティング環境

AWS Batch には「コンピューティング環境」という概念がありますが いわゆる「クラスタ」のようなもので、複数インスタンスの集合です。

そしてそれは、用途に応じて 2 種類あります。

Managed 環境

Unmanaged でなければいけない理由がなければ Managed 環境がオススメ。 Managed 環境の特徴は以下の通り。

Unmanaged 環境

ちょっと変わったクラスタにカスタマイズする必要がある場合はこちら。 AWS Batch の生成する ECS クラスタに「関連づけるインスタンス」を 自由にカスタマイズ可能。例えばこんなとき。

Unmanaged 環境の場合はキューの深さによるオートスケールが働かないため このようなアーキテクチャ で別途用意する必要があります。

ジョブ定義・実行

ジョブの定義は JSON で事前に宣言 することになります。 ジョブの処理ロジックについては、さらにそれ以前に Docker イメージにして DockerHub や ECR などに push しておく必要があります。

実行時パラメタ

ジョブの基本的な起動パラメタは事前に JSON に定義するものの、 実行時に挙動を変える手段が AWS Batch には 2 つのあります

依存関係のあるジョブ

ジョブ投入時に --depends-on オプションで、すでに投入済みの 依存するジョブの ID を渡すことで依存関係を定義できます。

ジョブ間のデータ連携

HPC 系バッチコンピューティングを支援するマネージドサービスということで そのデータの連携には以下サービス群の利用が想定されているようです。

他サービスとの連携

AWS を使い倒せば、よりセキュアで安定したサービスにも

他サービスとの使い分け

Lambda や EMR、ECS とどう使い分けるの?という。Batch を選択する意味。

なぜ Batch がでたのか

Azure には AWS より以前に、同名の Azure Batch というサービスがありましたが こちらも狙いは、汎用的な 科学技術計算や HPC 基盤のマネージド提供でした。

AWS にも EMR や MachineLearning といったある種の問題解決に特化した マネージドサービスはありましたが、汎用的なバッチ環境としては AWS Batch が最も適切なサービスとなりそうです。

使い分け

上記のメリットに合致したジョブなら AWS Batch。 悩ましいとしたら、例えば

のならば AWS Batch を使う、など。

使ってみよう

実際にジョブを流してみると感覚がつかめると思います。

ハンズオン

  1. Managed 環境だった場合の挙動 

  2. A が正常終了(SUCCEEDED)すると B が開始され、A が異常終了(FAILED)した場合は B も FAILED になる 

  3. 厳密には待機ジョブの数で調整がかかるので、CPU やメモリなどに応じたリソースの調達・解放がしたい場合は API を利用したプログラムが別途必要 

  4. 2017/03/01 時点