😺
EventBridgeでStep Functionsにイベント全体とカスタムデータを渡す
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