确保您已在 dynamodb 表 stream: StreamViewType.NEW_IMAGE 上启用流。
以下代码对我有用,它与您的代码相似。
import * as cdk from '@aws-cdk/core';
import { StartingPosition } from '@aws-cdk/aws-lambda';
import { AttributeType, BillingMode, StreamViewType, Table } from '@aws-cdk/aws-dynamodb';
import { DynamoEventSource } from '@aws-cdk/aws-lambda-event-sources';
import { Construct, Stack } from '@aws-cdk/core';
import { NodejsFunction } from '@aws-cdk/aws-lambda-nodejs';
export class CdkDemoStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, readonly dynamoStack: DynamoStack, props?: cdk.StackProps) {
super(scope, id, props);
const demoFn = new NodejsFunction(this, 'DemoFunction', {
entry: 'lambda/index.js'
});
const streamEventSource = new DynamoEventSource(this.dynamoStack.configTable, {
batchSize: 1,
startingPosition: StartingPosition.TRIM_HORIZON
});
demoFn.addEventSource(streamEventSource);
}
}
export class DynamoStack extends Stack {
readonly configTable: Table;
constructor(scope: Construct, id: string) {
super(scope, id)
this.configTable = new Table(this, 'ConfigTable', {
partitionKey: {
name: 'id',
type: AttributeType.STRING
},
stream: StreamViewType.NEW_IMAGE
});
}
}
我的bin/infra.ts 文件如下所示
#!/usr/bin/env node
import * as cdk from '@aws-cdk/core';
import { CdkDemoStack, DynamoStack } from '../lib/cdk-demo-stack';
const app = new cdk.App();
const dynamoDbStack = new DynamoStack(app, 'DynamoStack')
new CdkDemoStack(app, 'CdkDemoStack', dynamoDbStack);
注意:我使用的是CDK版本1.92.0。