Amazon Web Services ブログ

AWS Batch – AWSでバッチ処理ジョブを実行する

私は1978年秋に大学に入学しました。モンゴメリー・カレッジのコンピュータ・サイエンス部門は、強力な(当時の)IBM 370/168メインフレームを中心に構築されました。 Keypunchマシンを使用してカードデッキを準備する方法、実際のコードの前にジョブの名前と優先順位を設定し、FORTRAN、COBOL、またはPL / Iコンパイラを呼び出す暗黙のジョブ制御言語(JCL) 。デッキを提出ウィンドウに持ってきて、ジョブIDと引き換えにオペレーターに渡してから、数時間後に戻って印刷出力とカードデッキを回収します。私はその印刷物を慎重に研究しましたが、仕事に就いて数時間を待ってから、実際の稼動時間はほんの数秒であったことに気付いていました。仲間の学生と私がすぐに学んだように、学校のIT部門が開始した仕事は優先順位4で実行され、私たちは8で実行されました。彼らの仕事は私たちよりも優先されました。優先順位の高いメカニズムの目標は、高価なハードウェアを可能な限り完全に使用することでした。学生の生産性は、リソースの効率的な使用に引き続き二次的でした。

今日のバッチコンピューティング
今日、バッチ・コンピューティングは依然として重要です!より簡単にコンピューティングパワーにアクセスすることで、映画スタジオ、科学者、研究者、数値アナリストなどがこれまで以上に多くのコンピューティングサイクルを楽しめるようになりました。多くの組織では、オープンソースまたは商用ジョブスケジューラを搭載した社内の計算クラスタを構築することによって、これらのニーズに対応しようとしています。三度、優先順位が立ちはだかり、依然として、決して十分な計算能力がないようです。クラスタは、構築・運用するのに費用がかかり、同一の、ほぼ差異のないプロセッサの大きな配列で構成され、ビンテージとまったく同じ仕様に構築されることが多い。

クラウドコンピューティングは、さまざまな種類のEC2インスタンスへの迅速なアクセス、ニーズの変化に対応して拡大縮小する機能、および、必要なキャパシティに対して入札を行い、可能な限り経済的にそれを得られる価格モデルによって、バッチコンピューティングモデルをより良いものに変える可能性を秘めています。これまで、多くのAWSのお客様は、EC2インスタンス、コンテナ、通知、CloudWatchモニタリングなどを使用して独自のバッチ処理システムを構築してきました。これは非常に一般的なAWSユースケースであることが判明し、バッチ処理システムの構築を達成することをさらに容易にすることに決めました。

AWS Batchの紹介
今日、完全に管理されたバッチ機能の新しいセットについてお話したいと思います。 AWS Batchにより、バッチ管理者、開発者、およびユーザーは、クラスタのプロビジョニング、管理、監視、またはメンテナンスを行うことなく、クラウドのパワーにアクセスできます。購入するものはなく、インストールするソフトウェアはありません。 AWS Batchは、特に違いを生まない重い作業を処理し、EC2インスタンスの動的にスケーリングされたセットでコンテナイメージとアプリケーションを実行できるようにします。 Amazon EC2とEC2 Spotによって提供される弾力性と選択性を活かした並列ジョブを大量に実行することができ、効率的で使いやすく、クラウド向けに設計されており、他のAWSサービスAmazon S3、DynamoDB、およびSNSが含まれます。

重要なAWS Batch用語とコンセプトを見てみましょう(バッチ処理を既に行っている場合は、これらの用語の多くはおなじみですが、ここでもまた適用されています)。以下です:

ジョブ – AWS Batchに送信する作業単位(シェルスクリプト、Linux実行可能ファイル、コンテナイメージ)。これは名前を持ち、ジョブ定義で指定したパラメータを使用してEC2上のコンテナ化されたアプリケーションとして実行されます。ジョブは、名前またはIDで他のジョブを参照することができ、他のジョブの正常終了に依存することができます。

ジョブ定義 – ジョブの実行方法を指定します。 AWSリソースへのアクセスを提供するためのAWS Identity and Access Management(IAM)ロールを含み、メモリ要件とCPU要件の両方を指定します。この定義では、コンテナのプロパティ、環境変数、およびマウントポイントも制御できます。ジョブ定義の多くの仕様は、個々のジョブをサブミットするときに新しい値を指定することによって無効にすることができます。

ジョブキュー – コンピューティング環境にスケジュールされるまでジョブが常駐します。各キューには優先度の値が関連付けられています。

スケジューラ – ジョブキューに接続されたスケジューラは、ジョブキューに送信されたジョブをいつ、どこで、どのように実行するかを決定します。 AWS BatchスケジューラはFIFOベースであり、ジョブ間の依存関係を認識しています。優先順位を強制し、キューが共通のコンピューティング環境を共有する場合は優先度の低いキューより優先度の高いキューからジョブを優先して実行します。また、スケジューラは、ジョブが適切なサイズの計算環境で実行されることを保証します。

コンピューティング環境 – ジョブを実行するために使用される管理対象リソースまたは管理対象外コンピューティングリソースのセット。管理環境では、いくつかの詳細レベルで希望するインスタンスタイプを指定できます。特定のタイプのインスタンス、c4.2xlargem4.10xlargeなどの特定のモデルを使用するコンピューティング環境を設定するか、単に最新のインスタンスタイプを使用するように指定することができます。 Spot Market上の入札のパーセンテージ値と、VPCサブネットのターゲットセットを指定して、環境のvCPUの最小、希望、最大数を指定することもできます。これらのパラメータと制約があると、AWS Batchは必要に応じてEC2インスタンスを効率的に起動、管理、終了します。独自の計算環境を起動することもできます。この場合、AWS Batchが作成するAmazon ECSクラスタ内のインスタンスを設定し、スケーリングする責任がご自身にあります。

クイックツアー
AWS管理コンソールAWSコマンドラインインターフェイス(CLI)、またはAWS Batch APIから、AWS Batchにアクセスできます。簡単なコンソールツアーをしてみましょう!

ステータスダッシュボードには、私のジョブ、ジョブキュー、およびコンピューティング環境が表示されます。

ジョブを実行する場所が必要なので、Compute environmentsを選択し、Create environmentをクリックします。まず、Managed環境を作成し、名前を付け、IAMの役割を選択することから始めます(これらは自動的に作成されました)。

次に、プロビジョニングモデル(オンデマンドまたはスポット)を設定し、必要なインスタンスファミリ(または特定のタイプ)を選択し、(vCPUで測定した)計算環境のサイズを設定します。

自分のVPC、コンピューティングリソースのサブネット、およびそれらのリソースに関連付けられるセキュリティグループを選択することでまとめます。

Createをクリックすると、最初のCompute Environment(MainCompute)が数秒で準備完了します。

次に、コンピューティング環境にジョブを送るためにジョブキューが必要です。私はQueuesを選択し、Create Queueをクリックしてこれを設定します。すべてのデフォルトを受け入れ、ジョブキューを新しいコンピューティング環境に接続し、Create queueをクリックします。

繰り返しますが、数秒で利用可能になります。

ここで、私はジョブ定義を設定できるようになります。Job definitionsを選択し、Createをクリックしてから、定義を設定します(これは非常に単純なジョブですが、私はあなたがもっとうまくやってくれると確信しています)。私のジョブはsleepコマンドを実行し、1つのvCPUが必要で、128 MBのメモリに収まります:

環境変数を渡したり、特権アクセスを無効にしたり、プロセスのユーザー名を指定したり、コンテナ内でファイルシステムを利用できるようにすることもできます。

Savaをクリックすると、ジョブ定義はすぐに準備完了になります:

もう最初のジョブをする準備ができました!私はJobsを選択し、Submit jobをクリックします:

ジョブの多くの面を上書きしたり、タグを追加したりすることもできます。今回は、そのままの状態にしてSubmitをクリックします:

すると、こうなります:

また、ジョブを実装するRuby、Python、Node、またはBashスクリプトを指定して、ジョブをサブミットすることもできます。例えば:

コンソールで使用した操作に相当するコマンドラインには、create-compute-environmentdescribe-compute-environmentcreate-job-queuedescribe-job-queueregister-job-definitionsubmit-joblist-jobs、およびdescribe-jobsが含まれます。

私はAWS Batch APIがいくつかの面白い方法で使用されることを期待しています。たとえば、新しいオブジェクト(デジタルX線、地震観測のバッチ、3Dシーン記述)がS3バケットにアップロードされたときに呼び出されるLambda関数を想像してみてください。この関数は、オブジェクトを調べ、いくつかのメタデータを抽出し、SubmitJob関数を使用して1つ以上のジョブを送信してデータを処理し、更新されたデータをAmazon DynamoDBに保存し、通知をAmazon Simple Notification Service(SNS)に送信します。

価格と利用
AWS Batchは、US East(Northern Virginia)リージョンにてプレビュー版でご利用いただけます。今後の、リージョンの拡大に加えて、短期的なAWS Batchロードマップには他にも多くの興味深い機能があります。たとえば、AWS Lambdaをジョブとして使用することができます。

AWS Batchの使用は無料です。消費する基盤となるAWSリソースに対してのみお支払いいただきます。

Jeff;

原文:AWS Batch – Run Batch Computing Jobs on AWS(翻訳:半場 光晴)