0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS LambdaのテストイベントをCDKで管理したい

Posted at

動機

AWS Lambdaをコンソールで見るとテストイベントってあるじゃないすか。
たまーに検証で使ったり、単発で実行してテストデータ作るのに使ったりしてたんですけど、あれをコンソールから編集するのが嫌だったんですよね。
そんなもんコードで管理したいんや!
あんまり需要ないかもしれないけど、忘れる前に記録。

前提

AWS CDK v2.164.1(たぶん2系なら動くのでは)
typescript v5.6.3

サンプルコード

以下でプロパティがcategoryのみのオブジェクトを持ったテストイベントができます。
テストイベント「testtt-timeout」は {category: "timeout"} を持ちます。
テストイベント「testtt-exception」は {category: "exception"} を持ちます。
を持ちます。

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as path from 'path';
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as eventschemas from 'aws-cdk-lib/aws-eventschemas';

export class LambdaTestStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    //targetLambda
    const lambdaName = 'lambda-testtt';
    new NodejsFunction(this, `${id}-TestttFunction`, {
      runtime: lambda.Runtime.NODEJS_20_X,
      entry: path.join(__dirname, '../lambda/testtt.ts'),
      functionName: lambdaName,
      handler: 'handler',
    });
    
    //testEvent
    new eventschemas.CfnSchema(this, `${id}-CfnSchema`, {
      registryName: "lambda-testevent-schemas",
      type: 'OpenApi3',
      schemaName: `_${lambdaName}-schema`,
      content: JSON.stringify({
        openapi: '3.0.0',
        info: {
          version: "1.0.0",
          title: "Event"
        },
        paths: {},
        components: {
          schemas: {
            Event: {
              type: "object",
              required: [
                "category"
              ],
              properties: {
                category: {
                  type: "string"
                }
              }
            }
          },
          examples: {
            "testtt-timeout": {
              value: {
                category: "timeout"
              }
            },
            "testtt-exception": {
              value: {
                category: "exception"
              }
            }
          }
          
        }
      }),
    });
  }
}

ざっくり補足

命名規則通りにLambdaの関数名を仕込んだイベントスキーマを作ることで、その名前のLambdaから参照できるようです。
テストはEventBridgeのスキーマレジストリに保存されます。

説明 備考
schemaName `_${lambdaName}-schema` なまえだいじ
components.schemas.Event イベントのスキーマ この辺参照
components.examples テストイベント(複数可) ここの名称がイベント名として反映される

参考

世界の叡智によって支えられています。
マニュアル読み取り下手くそ勢な私にはサンプル書いてくれる方々はまさに神。

https://stackoverflow.com/questions/60329800/how-can-i-create-a-lambda-event-template-via-terraform
https://www.tecracer.com/blog/2022/08/prepopulate-lambda-console-testevents-without-dirty-manual-work-using-terraform.html

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?