LoginSignup
4
4

More than 5 years have passed since last update.

AWS Batch を動かしてみる

Posted at

概要

AWS Batchを一通り動かしてみる。

↓の続きです
AWSでバッチ処理をするときの方法を考える

実践

※参考にしたサイト
API Gateway + LambdaでAWS BatchのJobを実行する

1. AWS Batchを作成

AWS Batchを開きます。

スクリーンショット 2017-08-14 17.20.26.jpg

色々入力するところがあるけど全部デフォルトでいいです。
スクリーンショット 2017-08-14 19.04.19.jpg

スクリーンショット 2017-08-14 19.48.45.jpg
そしてCreate。

スクリーンショット 2017-08-14 17.25.46.jpg
実行直後はPriorityが1になっていればとりあえず問題ないはずです。
しばらく経つとするとRUNABLEに入り、SUCCEEDEDに入ればJob完了です。

LambdaからBatchを起動する際にBatchのjobQueueArnが必要なのでJob queuesから確認してメモしておきます。
スクリーンショット 2017-08-14 20.29.01.jpg

2. AWS Batchを起動するLambdaの作成

まずLambda用の新規ロール作成からです。
下記のようなポリシーのロールを作成しておきます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "batch:SubmitJob"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

ロールを作成したらLambdaを作っていきます。
スクリーンショット 2017-08-14 17.30.50.jpg

設計図は使用せずに 「一から作成」 を選択。
スクリーンショット 2017-08-14 17.31.03.jpg

トリガーは追加せずに「次へ」。
スクリーンショット 2017-08-14 17.31.12.jpg

関数の設定です。
適当に名前を付けて、サンプル通りPython3.6を選びます。
スクリーンショット 2017-08-14 17.42.22.jpg

Lambdaの関数コードは下記に書き換え。

import boto3

def lambda_handler(event, context):

    client = boto3.client('batch')

    JOB_NAME = event['JobNeme']
    JOB_QUEUE = "arn:aws:batch:ap-northeast-1:xxxxxxxxxxxx:job-queue/first-run-job-queue"
    JOB_DEFINITION = "first-run-job-definition:1"

    response = client.submit_job(
        jobName = JOB_NAME,
        jobQueue = JOB_QUEUE,
        jobDefinition = JOB_DEFINITION
        )
    print(response)
    return 0

※8行目 JOB_QUEUE = <1.で作成したBtachのQueue arnに書き換え>

ロールは「テンプレートから新規作成し、テンプレートは "AWS Batchアクセス権限" を選びます」
スクリーンショット 2017-08-14 17.42.40.jpg

次へ
スクリーンショット 2017-08-14 17.42.49.jpg

ざっくり確認しておきます
スクリーンショット 2017-08-14 17.43.23.jpg

スクリーンショット 2017-08-14 17.43.29.jpg

おめでとうございます。
スクリーンショット 2017-08-14 17.44.07.jpg

3. LambdaのためのAPI Gatewayを作る

  1. 先に作成したLambdaのトリガータブを開き「+トリガーを追加」します
    スクリーンショット 2017-08-14 17.44.41.jpg

  2. API Gatewayをトリガーとして設定して送信します。
    スクリーンショット 2017-08-14 17.46.24.jpg

  3. メソッドの作成からPOSTを追加します。
    スクリーンショット 2017-08-14 17.47.34.jpg

  4. 先に作成したLambdaのリージョンを選び、Lambda関数を選択します。
    スクリーンショット 2017-08-14 17.49.06.jpg

  5. APIをデプロイします。
    スクリーンショット 2017-08-14 17.49.35.jpg

  6. 実験ですがProdで特に問題ないです。
    スクリーンショット 2017-08-14 17.49.44.jpg

  7. デプロイが完了するとURLが生成されます。
    スクリーンショット 2017-08-14 17.49.55.jpg

4. 動作確認

  1. 生成されたurlにcurlでPOSTしてみます。
$ curl -X POST -d '{ "JobName" : "test" }' https://xxxxxxxxxx.execute-api.us-east-2.amazonaws.com/prod/ToBatch/
  1. コマンドラインに応答はありませんが、BatchのJob queuesに新しいJobが入ってきます。 スクリーンショット 2017-08-14 18.30.40.jpg

5. 完了

一旦これで実用的な形になったと思います。
あとはJobに自分の処理内容を乗せておけば、APIでいつでも実行可能となります。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4