概要
AWS Batchを一通り動かしてみる。
↓の続きです
AWSでバッチ処理をするときの方法を考える
実践
※参考にしたサイト
API Gateway + LambdaでAWS BatchのJobを実行する
1. AWS Batchを作成
AWS Batchを開きます。
実行直後はPriorityが1になっていればとりあえず問題ないはずです。
しばらく経つとするとRUNABLEに入り、SUCCEEDEDに入ればJob完了です。
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を作る
4. 動作確認
- 生成されたurlにcurlでPOSTしてみます。
$ curl -X POST -d '{ "JobName" : "test" }' https://xxxxxxxxxx.execute-api.us-east-2.amazonaws.com/prod/ToBatch/
5. 完了
一旦これで実用的な形になったと思います。
あとはJobに自分の処理内容を乗せておけば、APIでいつでも実行可能となります。