AWS boto3 submit_job で実行する Batch Job のステータスを監視する

Batch — Boto3 Docs 1.21.3 documentation
のドキュメントを頼りに、以下のような 1つの Job が動いて成功したら次の Job を実行する
LambdaPythonで書く。

lambda_function.py ソースコード

import logging
import boto3

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

    logger.info('# boto3 vertion: {0}'.format(boto3.__version__));
    
    client = boto3.client('batch', region_name='ap-northeast-1')

    JobAsubmit = client.submit_job(
        jobName = 'JOB-A',
        jobQueue = 'job-queue',
        jobDefinition = 'JOB-A:1',
        containerOverrides={
            'command': ['java', '-jar', 'ajob.jar' ]
        }
    )
    JobBsubmit = client.submit_job(
        jobName = 'JOB-B',
        jobQueue = 'job-queue',
        dependsOn=[
            {
                'jobId': JobAsubmit['jobId']
            },
        ],
        jobDefinition = 'JOB-B:1',
        containerOverrides={
            'command': ['java', '-jar', 'bjob.jar' ]
        }
    )
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

JOB-A, JOB-B の実行状況を参照しようとする。

docs.aws.amazon.com

によると、describe_jobs(**kwargs) を使用するのだが、
引数に与えるのは、Job定義ではなく、発行したJobId である。
しかも、100個までしか指定できない。

だから、describe_jobs 呼び出しは以下のようにする。

describeResonse = client.describe_jobs(jobs=[ JobAsubmit['jobId'], JobBsubmit['jobId'] ])

# 参照できた jobName と status を、'jobName:status’の書式にしてリスト化する。
list = [ "{jobName}:{status}".format(**job) for job in describeResonse['jobs'] ]

このままでは、describe_jobs 実行に対して、AccessDenied が発生する
https://aws.amazon.com/jp/premiumsupport/knowledge-center/troubleshoot-iam-policy-issues/

と案内あるが、
すぐに解決に辿り着けない。非常に解りにくい。

結局、手っ取り早く、実行する Lambda インラインポリシーを作成して以下を付与して解決

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