初めてのAWS Batch – 必要な各コンポーネントを理解する –
コンニチハ、千葉です。
AWS Batchを導入する機会があり、AWS Batchのコンポーネントを整理してみました。
AWS Batchとは?
AWS Batch登場以前、バッチ処理でスケーラビリティをもたせようとすると以下のような構成案がありました。SQSを利用したpull型のバッチ処理です。
- 処理対象をSQSにキューイング
- EC2上にデプロイされたプログラムにより、キューを取得、処理、キューを削除
- AutoScalingを設定し、キューの数によりスケールアウト、スケールイン
この方式を利用する場合、SQS、AutoScaling、AMI(アプリをインストール)を設計・構築する必要があり各サービスを理解して使いこなす必要がありました。
この構成を簡単一発で利用できるようになるのがAWS Batchです。
AWS Batchでは、Dockerを利用したバッチ処理環境が構成できます。FIFO対応のキュー、ECS環境、AutoScalingにより、簡単にスケーラブルなバッチ処理環境を構成できるようになります。リトライもAWS Batchにて指定可能です。
AWS Batchの環境
AWS Batchのコンポーネント
AWS Batchに登場するコンポーネントです。3つあるのでそれぞれ記載します。これらのコンポーネントはAWS Batchのマネージメントコンソールの画面で指定します。
ジョブキュー
AWS Batch用のジョブキューです。FIFOに対応しています。キューには優先順位をつけることができます。優先順位1より、優先順位10が先に実行されます。
コンピューティング環境
バッチを処理するEC2環境を定義します。インスタンスタイプから、key pair、ロールなどを指定します。また、AutoScalingに関する設定します。AutoScalingの設定ポイントとしては、EC2のインスタンス数での指定ではなくvCPUで指定します。Dockerコンテナを起動するときに利用するvCPUを指定するのですが、この特性に合わせた指定方法ですね。また、インスタンスタイプも「m4 family」のような柔軟な指定も可能です。これによりスポットインスタンス利用でコスト削減も可能です。
ジョブ定義
こちらはECSのタスク定義をイメージしていただけるとわかりやすいかと思います。ジョブとして起動するコンテナイメージ、実行コマンド、環境変数、マウントするボリュームなどを指定します。また、コンテナ実行エラー時のリトライ回数を指定できます。エラー判定は以下になります。
- コンテナジョブのゼロ以外の終了コード
- Amazon EC2 インスタンスの障害または終了
- AWS サービスの内部エラーまたは停止
ジョブ
ジョブを登録することで、ジョブがキューイングされコンピューティング環境でジョブが実行されます。またジョブ登録時に、ジョブ定義で指定しているいくつかのパラメータを上書きできます。例えば、環境変数に処理IDを指定することでコンテナで特定のジョブを実行するように変更できます。
ジョブのステータスについて、STARTING、RUNNING、SUCCEEDED、FAILEDなどがありますが詳細は以下に記載されております。
http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/job_states.html
ECR
バッチ処理用のコンテナイメージを格納します。ジョブ定義にて、コンテナイメージを指定するのですが、そのリポジトリです。手動で作成する必要があります。事前に作成してイメージをアップしておきましょう。
ECS
AWS Batchを定義すると自動で環境が構築されます。ECSのコンソールから設定を覗けますが、特段理由がないかぎり意識は不要です!
AutoScaling
こちらもAWS Batchを定義すると自動で環境が構築されます。AutoScalingから設定を覗けますが、特段理由がないかぎり意識は不要です!むしろ手で変えないほうがいいと思います!AWS Batchの変更を行うとAutoScalingの設定も反映されます。
最後に
AWS Batchで利用される各コンポーネントについて整理しました。次回はAWS Batchを利用する上で設計した内容は以下のエントリでまとめました。
初めてのAWS Batch – 利用時に考慮したことやったことまとめ –