AWS CDK(v2) StepFunctions の BatchSubmitJob で command を Context や Input から動的に上書きする

目次

はじめに

AWS CDK で StepFunctions から AWSBatch を実行するときに、 BatchSubmitJob を使うと便利ですが、 containerOverrides.command を 上書きする方法がなかなか調べられなかったので書き残しておきます。

Version

  • aws-cdk: 2.20.0

BatchSubmitJob で command を Context や Input から動的に上書きする方法

aws_stepfunctions.JsonPath というのが使えて、 string[] が期待されるパラメータであれば、 JsonPath.listAt(JSON_PATH) が使えます。

従って、例えば、以下のように書くことができます。 他にも JsonPath.numberAt(JSON_PATH)stringAt() などもあります。

少し注意が必要なのは、 入力となる JSON の中に、 指定した JSON_PATH がない場合はエラーになります。

import {
  aws_stepfunctions as sfn,
  aws_stepfunctions_tasks as tasks,
} from "aws-cdk-lib";

export class MyAwesomeStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);
    // ...
    const batchTask = new tasks.BatchSubmitJob(this, `SubmitJobTask`, {
    jobDefinitionArn: JOB_DEF_ARN,
    jobName: "SubmitJob",
    jobQueueArn: JOB_QUEUE_ARN,
    containerOverrides: {
        command: sfn.JsonPath.listAt("$.commands"),
    },
    attempts: sfn.JsonPath.numberAt("$.attempts"),
    });
    // ...
  }

※ 入力の JSON 例

{
  "commands": ["echo", "hello"],
  "attempts": 3
}

さいごに

こういう情報がなかなかピンポイントで検索に引っかからない(検索下手なのか…)ので難航します。