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

目次

はじめに

AWS CDK で StepFunctions から Lambda を実行するときに、 LambdaInvoke を使うと便利ですが、 その payload を Input 情報から Mapping する方法をメモしておきます。 これは検索すると結構見つかりますが、 AWSBatch の BatchSubmitJob と指定の仕方が違うのでちょっと注意が必要です。

Version

  • aws-cdk: 2.20.0

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

Lambda の payload (Lambda の Handler に渡される Object) は TaskInput.fromObject() を使うと良いようです。 ここで指定した Object がそのまま handler に渡されます。

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 reportTask = new tasks.LambdaInvoke(this, "ReportTask", {
    lambdaFunction: reportLambda,
    payload: sfn.TaskInput.fromObject({
        taskName: sfn.JsonPath.stringAt("$.taskName"),
        report: sfn.JsonPath.objectAt("$.report"),
    }),
  });
}

※ 入力の JSON 例

{
  "taskName": "MyGreatTask",
  "report": {
    "profit": "5000兆円"
  }
}

さいごに

メモでした。