Format Lambda invocation input from EventBridge using AWS CDK
EventBridgeからLambdaへ送信された値は、通常、detailの内部に展開されます。ただし、「API Gatewayで呼び出しているLambdaを再利用したいケース」などでは、detailの中身だけをLambdaに渡す必要があります。これを実現するために、CDKで提供されているEventBridgeのinput transformerを使用して、中身を変換することができます。コードの場合、RuleTargetInput.fromObjectの代わりに、RuleTargetInput.fromTextを使用します。
広告ここから
広告ここまで
目次
通常、EventBridgeからLambdaへ送られてきた値はdetail
の内部に展開されます。
{
.../* EventBridge execution parameters */
detail: {
/* input payload */
}
}
ただし、「API Gatewayで呼び出しているLambdaを再利用したいケース」などでは、detail
の中身だけLambdaに渡したくなります。
{
/* input payload */
}
トランスフォーマーをCDKで設定する
EventBridgeの “input transformer“を利用して、中身を変換しましょう。
CDKを利用する場合、このようなコードで定義できます。
import { EventBus, Rule, RuleTargetInput, EventField } from '@aws-cdk/aws-events';
import {
LambdaFunction,
} from '@aws-cdk/aws-events-targets'
const bus = new EventBus(this, 'EventBus', {
eventBusName: 'ExampleBusName1'
})
const eventRule = new Rule(this, 'EventRule', {
description: 'example event rule',
enabled: true,
eventBus: bus,
eventPattern: {
detailType: [
"customer.created",
"customer.updated"
],
source: [
"Stripe"
]
},
ruleName: 'ExampleRule1',
targets: [
new LambdaFunction(Lambda, {
event: RuleTargetInput.fromObject({
name: EventField.fromPath('$.detail.name'),
detail: EventField.fromPath('$.detail.detail')
})
})
]
})
テキストの場合は、RuleTargetInput.fromObject
の代わりに RuleTargetInput.fromText
を使いましょう。