😺

EventBridgeでStep Functionsにイベント全体とカスタムデータを渡す

2024/09/24に公開

AWSのEventBridgeからStep Functionsのステートマシンを起動する際に、イベントデータ全体とカスタムデータを一緒に渡す方法をシェアします。

AWSを使っていると、EventBridgeから何かのアクションをトリガーすることはよくありますよね。そのとき、ただイベントデータを渡すだけでなく、追加で自分で定義したデータも一緒に渡せたら便利じゃないですか?実はこれ、めちゃくちゃ簡単にできちゃいます!

EventBridgeルールのターゲット設定

まず、EventBridgeでステートマシンをターゲットとして設定します。このとき、イベントデータ全体とカスタムデータを一緒に渡す設定を行います。方法は簡単。InputTransformerを使ってイベントデータ全体をペイロードに含め、そこに自分で定義したカスタムデータを追加するだけです。

CloudFormationでの設定例

{
  "Targets": [
    {
      "Arn": "arn:aws:states:region:account-id:stateMachine:stateMachineName",
      "Id": "TargetId",
      "RoleArn": "arn:aws:iam::account-id:role/role-name",
      "InputTransformer": {
        "InputPathsMap": {
          "event": "$"
        },
        "InputTemplate": "{ \"event\": <event>, \"customKey\": \"customValue\" }"
      }
    }
  ]
}

この設定を使うと、イベント全体がeventというキーでステートマシンに渡されます。そして、customKeyという名前でcustomValueを追加できます。要は、イベントデータとカスタムデータを簡単に一つのJSONにまとめて送信できるわけですね。

AWS CDKでの設定

もしCDKを使ってインフラをコード化しているなら、設定はさらに楽ちん。次のように書くだけです。

import * as cdk from 'aws-cdk-lib';
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
import * as sfn from 'aws-cdk-lib/aws-stepfunctions';

const rule = new events.Rule(this, 'Rule', {
  eventPattern: {
    source: ['aws.service'],
  },
});

const stateMachine = sfn.StateMachine.fromStateMachineArn(this, 'StateMachine', 'arn:aws:states:region:account-id:stateMachine:stateMachineName');

rule.addTarget(new targets.SfnStateMachine(stateMachine, {
  input: events.RuleTargetInput.fromObject({
    event: events.RuleTargetInput.fromEventPath('$'),
    customKey: 'customValue',
  }),
}));

これで、イベントデータ全体と一緒にcustomKeyというカスタムデータもステートマシンに渡せます。

まとめ

AWSを使っていると、柔軟にデータをやり取りしたいシーンが多々あると思います。今回紹介した方法を使えば、EventBridgeからStep Functionsに渡すデータに自由にカスタムデータを追加できるので、ぜひ試してみてくださいね!

Discussion