動機
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