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

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark