#概要
AWS Batchを一通り動かしてみる。
↓の続きです
AWSでバッチ処理をするときの方法を考える
実践
※参考にしたサイト
[API Gateway + LambdaでAWS BatchのJobを実行する]
(http://dev.classmethod.jp/cloud/aws/submit-batch-job-with-api-gateway-and-lambda/)
##1. AWS Batchを作成
AWS Batchを開きます。
LambdaからBatchを起動する際にBatchのjobQueueArnが必要なのでJob queuesから確認してメモしておきます。
##2. AWS Batchを起動するLambdaの作成
まずLambda用の新規ロール作成からです。
下記のようなポリシーのロールを作成しておきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"batch:SubmitJob"
],
"Resource": [
"*"
]
}
]
}
関数の設定です。
適当に名前を付けて、サンプル通りPython3.6を選びます。
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アクセス権限" を選びます」
##3. LambdaのためのAPI Gatewayを作る
- 先に作成したLambdaのトリガータブを開き「+トリガーを追加」します
- API Gatewayをトリガーとして設定して送信します。
- メソッドの作成からPOSTを追加します。
- 先に作成したLambdaのリージョンを選び、Lambda関数を選択します。
- APIをデプロイします。
- 実験ですがProdで特に問題ないです。
- デプロイが完了するとURLが生成されます。
##4. 動作確認
- 生成されたurlにcurlでPOSTしてみます。
$ curl -X POST -d '{ "JobName" : "test" }' https://xxxxxxxxxx.execute-api.us-east-2.amazonaws.com/prod/ToBatch/
- コマンドラインに応答はありませんが、BatchのJob queuesに新しいJobが入ってきます。
##5. 完了
一旦これで実用的な形になったと思います。
あとはJobに自分の処理内容を乗せておけば、APIでいつでも実行可能となります。