AWSAWS CDK

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 を使いましょう。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts