AWS Batchの基本的な機能とユースケースについて #reinvent

eyecatch_batch

バッチ処理

世の中のITシステムのほとんどは、データが発生し、流れて、処理し、蓄積されるジョブの繰り返しです。AWS Batchは、このようなバッチジョブを効率的におこなうための管理サービスです。Pegasus WMS、Cromwell、Luigiといった主要なワークフローエンジンをサポートしています。実際のジョブの実行は、EC2やSpotインスタンスが動的にアサインされて実行されます。

データフロー図(DFD)

データフロー図で表現できるようなバッチ業務処理を管理するサービスとイメージしました。。

SS 2016-12-02 5.56.22

AWS Batchの基本機能

単ジョブの定義

CPU、メモリー、IAM Role、ボリューム、コンテナ、環境変数、等について、ECS上でアプリケーションを実行するために設定します。

ジョブの依存性モデリング

異なるジョブ間での依存関係を設定できます。例えば、3つのステップでデータを圧縮するジョブがあったとします。1つ目のジョブが終わると、2つ目に進み、最後に3つ目が実行されて完了するといった流れを実現できます。

有名なワークフローエンジンのサポート

AWS Batchは、 Pegasus WMS, Cromwell, Luigiなどの商用やOSSのワークフローエンジンをサポートします。そして、それぞれの言語を用いてワークフローを定義することができます。

動的なリソースの割当とスケーリング

AWS Batchは、必要なリソースやボリュームの要求に合わせて自動的にスケーリングするコンピュートノードを指定ことができます。その際に、VPCやサブネット、最小/最大/固定のCPU数、Spotインスタンス入札価格などを指定できます。また、利用者自ら管理するための環境を指定することもできます。

ジョブスケジューリングの優先順位付け

優先度の異なる複数のキューを作成することができます。ジョブは、実行可能になるまでキューに蓄積されます。スケジューラによって、いつどこでどのようにジョブがキューにサブミットされるか設定することができます。そして、キュー毎にCPU等の実行環境を設定することができます。例えば、優先度の高いキューは構成のインスタンスを利用する等です。

動的なSpot入札

AWS Batchは、できるだけ安くバッチジョブを実行できるように設計されています。事前に設定した要求環境を満たすEC2インスタンスについて、自動的にSpot入札を行いリソースを確保します。

モニタリングとロギングの統合

AWS管理コンソールにて、主要なメトリクスについて確認することができます。処理が実行されたのか、停止中か、実行済みかを知ることができます。実行ログはOSログとして出力されますが、CloudWatch Logsによって、AWS管理コンソールで確認ができます。

きめ細かいアクセスコントロール

IAMを使って細かいアクセス制御をすることができます。例えば、あるジョブがDynamoDBのテーブルにアクセスできるようにする等です。IAMを用いて同じ組織を異なるユーザーにポリシーを付与することができます。例えば、管理者にAWS Batch APIへのフルアクセス権限を与えたり、開発者にジョブの実行環境設定やジョブを作成する権限を与える等です。

価格

AWS Batch自体は無料です。このサービスにより起動されたEC2等に通常の課金がされます。

ユースケース

ここでは想定されるいくつかのユースケースを紹介します。

金融サービス

ハイパフォーマンス・コンピューティング

価格決め、マーケットポジション、リスクマネジメント等にHPCが用いられています。これらをAWS上のワークロードとして実行できます。以下の図のように、ファイルや他システムから送られてきて蓄積したデータを、AWS Batchを用いて、例えば並行して複数の処理を行い、結果を格納するといった流れです。

SS 2016-12-02 4.21.33

取引後の分析

トレーディングデスクは、その日の取引コスト、実行レポート、市場パフォーマンスなどを分析して、ポジションを改善する機会を常に探しています。 これは、取引日が終了した後に複数のソースから大量のデータセットをバッチ処理する必要があります。 AWS Batchにより、これらのワークロードの自動化が可能になり、翌日のトレーディングサイクルに入る適切なリスクを理解し、データに基づいたより良い意思決定を行うことができます。以下の図のように、取引結果ログがS3に保管され、AWS Batchを通じて、RedshiftやEMRを用いた分析を行って、結果を格納するといった流れです。

SS 2016-12-02 4.31.14

不正監視

不正行為は、すべての業界、特に金融サービスに影響を及ぼす継続的な懸念事項です。 Amazon Machine Learningは、この課題に対処するアルゴリズムとモデルを使用して、よりインテリジェントな方法でデータを分析できます。 組織は、AWS Batchと組み合わせて使用することで、データの不規則なパターンを検出するために必要なデータ処理や分析を自動化することができます。これは、マネーロンダリングや支払い詐欺などの不正行為の指標となります。以下の図のように、ファイルや他システムから送られてきて蓄積されたデータを、AWS Batchを通じて、機械学習して結果を格納するといった流れです。

SS 2016-12-02 4.32.57

ライフサイエンス

創薬スクリーニング

AWS Batchにより、創薬に関与する研究者は、通常はタンパク質受容体または酵素に結合する可能性が最も高い構造を同定するために、小分子のライブラリをより効率的かつ迅速に検索することができます。 これにより、科学者は薬物設計を開始するためのより良いデータを取得し、特定の生化学プロセスの役割をより深く理解することができ、より効果的な薬物および治療の開発につながる可能性があります。以下の図のように、S3に格納された小分子の創薬ターゲットのデータを、AWS Batchを通じて、スクリーニングを実行し、結果を格納します。

SS 2016-12-02 4.43.38

DNAシーケンス

生物情報学者は、生ファイルを生成するためにゲノム配列の一次解析を完了した後、二次解析を完了するためにAWS Batchを使用することができます。 AWS Batchを使用すると、複数の重複読取りと参照配列を比較し、参照と標本間の誤った整列によって生じるデータ・エラーを潜在的に減らすことができるため、生のDNA読取りを完全なゲノム配列に単純化および自動化できます。以下の図のように、生ファイルがS3に格納されると、S3通知からLambdaを実行してAWS Batchを呼び出します。AWS Batchに蓄積されたキューは、例えば依存関係や順序を持ったジョブとして処理が実行され、結果が格納されます。

SS 2016-12-02 5.04.56

デジタルメディア

レンダリング

AWS Batchは、コンテンツ制作者やポストプロダクションハウスにコンテンツレンダリングワークロードを自動化するツールを提供し、実行依存性やリソーススケジューリングによる人的介入の必要性を低減します。 これには、レンダリングファームでのコンピューティングコアのスケーリング、Spotマーケットによる計算インスタンスのトリガー、プロセス内の異なるステップの実行の調整が含まれます。以下の図のように、画像コンテンツがスケジューラによって、AWS Batchを呼び出し処理が始まります。S3やオンプレ環境からファイルを取出します。一方では、レンダリングを行い、もう一方では適切なライセンス管理処理がされます。そして、全て終わったら公開用のS3バケットに格納されます。

SS 2016-12-02 5.11.44

トランスコード

AWS Batchは、ワークフローを自動化し、リソースのボトルネックを克服し、非同期プロセスの実行をスケジューリングおよび監視し、必要に応じて特定のワークロードのリソースを拡大縮小する条件付き応答をトリガーすることにより、バッチおよびファイルベースのトランスコーディングワークロードを加速します。以下の図のように、コンテンツのデジタル資産管理やメディア資産管理を行うワークロードを実行します。

SS 2016-12-02 5.16.22

メディアサプライチェーン

AWS Batchは、処理段階において他の種類のジョブと従属ジョブの実行を調整することにより、複雑なメディアサプライチェーンのワークフローを簡素化し、メディアサプライチェーンのさまざまな貢献者に対するコンテンツ準備を管理するための共通フレームワークをサポートします。以下の図のように、映像データを取り込み、トランスコーディングや品質管理、パッケージングといった異なる種類のジョブについて、依存性をもって実行しています。

SS 2016-12-02 5.31.26

まとめ

AWS Batchが登場する前は、例えばS3の通知からLambdaが実行されて何かデータを処理するとか、SQSからデータを1つずつ取出してタスクを実行することはできましたが、個々の処理は単体で実行されていて、処理の順番や依存性の管理をプログラミング無しに扱うことは出来ず、EC2等で分岐や順番や依存関係をプログラミングする必要がありました。今回のAWS Batchの登場により、小さな粒度のジョブをまとめてジョブ定義として管理し、スケジュール化されたキュー実行として扱えて、ステータスの確認もできるようになったため、いわゆるバッチ処理と呼ばれるものはだいたい管理出来てしまうのでは無いかと思います。

参考資料

AWS Batch (preview) - AWS Cloud Fully Managed Batch Processing at Any Scale