Help us understand the problem. What is going on with this article?

AWS CLI で AWS Batch にジョブを送信する (第1回)

More than 1 year has passed since last update.

AWS CLI を使って AWS Batch を実行するまでを解説します。
このドキュメントを読むためには AWS EC2、AWS S3 および docker に対する基本的な知識が必要です。
なお、ジョブのスケジュール設定については解説しません。

目次

全3回です。

  1. はじめに ← イマココ
  2. パラメータを使ってジョブを送信する
  3. 環境変数を使ってジョブを送信する

AWS Batch とは

※正確な情報はAmazon 公式ドキュメントを参照してください。

AWS が用意したバッチジョブを実行するための仕組みです、と言ってしまえばおしまいですが、もう少し私なりに説明してみようと思います。

バッチジョブ実行システム

以下のような状況を想像してください。
画像処理を行うシステムを作ろうとしています。

  • 元画像(入力データ)は複数あり、AWS S3 に置いてあります。
  • 入力データをいろいろな種類の画像処理システムで加工して AWS S3 に出力します。
  • 処理システムは EC2 インスタンス上の docker コンテナを想定しています。

image.png

上の図(1)を見てください。「cat.A を S3 から取ってきて、グレイスケール化して、cat.A.gray として S3 に出力する」という実際の作業単位が 1 つのジョブです。
次に 「cat.B を S3 から取ってきて、グレイスケール化して、cat.B.gray として S3 に出力する」というのも 1 つのジョブです。この 2 つのジョブは入出力データのパスの違いを除くと「データを S3 から取ってきて、グレイスケール化してS3 に出力する」という作業は共通です。この「共通の部分」を定義しておき、入出力だけあとから指定できるようにしておけば、特別な作業なく cat.C も新たに処理できるよね、というのが AWS Batch の考え方です。プログラムの関数化やパッケージ化と同じ発想だと思います。

では実際に「共通の部分」には何が必要になるかを考えてみます。
まずは処理するためのライブラリ群が必要でしょう。AWS Batch においては docker イメージとして用意しておきます。
次にマシン環境が必要です。ジョブを実行するために必要な cpu や memory です。

AWS Batch に対して「共通の部分」そして「ジョブごとの違い」をどのように指定するかを次項で示します。

AWS Batch の構成要素

AWS Batch は以下 4 つの要素から構成されます。簡単に説明します。

ジョブごとに違う

  • ジョブ ... 実際の作業単位。ジョブ定義に基づいて作成され、キューに送信される。

共通

  • ジョブ定義 ... ジョブの実行環境を定義したもの。例えば、docker イメージや実行に必要な vcpus, memory を定義する。
  • キュー ... ジョブを送信する対象であり、コンピュート環境に紐づけられ優先順位を持っている。
  • コンピュート環境 ... ジョブを実行するために 1 つ以上作成する EC2 インスタンスの定義。

image.png

図の解説

  1. ジョブはキューに送信される。

  2. ジョブはキューの優先度の高い順に実行される。

    • 優先度が同じジョブの数に応じて EC2 インスタンスが作成される
    • Queue-2 は優先度の高いジョブがあるため実行を保留している。
  3. ジョブは docker コンテナで実行される。

    • どのような docker コンテナを作成するかはジョブ定義で定義されている
    • ジョブが複数あるとき、作成した EC2 インスタンスのスペック次第では docker コンテナを2つ立ち上げる。(※)

※実行できるジョブ数はどうやって決めているか
 AWS Batch 側で判断しているため推測ですが、ジョブ定義でジョブ実行に必要なスペックを指定しているため、立ち上げた EC2 インスタンスのスペックと照らし合わせて決めているようです。
 なお、スペックとはここでは vcpus と memory を指します。

実際の AWS CLI コマンドは次回、パラメータを使ってジョブを送信するで解説します。

aokad
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away