66} from "aws-cdk-lib/aws-dynamodb" ;
77import { Construct } from "constructs" ;
88import {
9- CfnEventSourceMapping ,
10- EventSourceMapping ,
11- EventSourceMappingOptions ,
9+ FilterCriteria ,
10+ FilterRule ,
1211 Runtime ,
1312 StartingPosition ,
1413} from "aws-cdk-lib/aws-lambda" ;
@@ -20,7 +19,12 @@ import {
2019} from "aws-cdk-lib/aws-lambda-nodejs" ;
2120import { Queue } from "aws-cdk-lib/aws-sqs" ;
2221import { RemovalPolicy , Stack , StackProps } from "aws-cdk-lib" ;
23- import { SqsDlq , SqsEventSource } from "aws-cdk-lib/aws-lambda-event-sources" ;
22+ import {
23+ DynamoEventSource ,
24+ SqsDlq ,
25+ SqsEventSource ,
26+ StreamEventSourceProps ,
27+ } from "aws-cdk-lib/aws-lambda-event-sources" ;
2428import { LambdaRestApi } from "aws-cdk-lib/aws-apigateway" ;
2529
2630const friendTableName = tableMap . get ( Friend ) ! ;
@@ -106,117 +110,80 @@ export class FriendMicroservicesStack extends Stack {
106110
107111 const stateHandleDLQ = new SqsDlq ( new Queue ( this , "stateHandleDLQ" ) ) ;
108112
109- const eventSourceMappingOptions : EventSourceMappingOptions = {
113+ const streamEventSourceProps : StreamEventSourceProps = {
110114 startingPosition : StartingPosition . LATEST ,
111115 batchSize : 5 ,
112- eventSourceArn : friendTable . tableStreamArn ,
113116 retryAttempts : 1 ,
114117 onFailure : stateHandleDLQ ,
115118 reportBatchItemFailures : true ,
116119 } ;
117120
118- const requestStateSourceMapping = new EventSourceMapping (
119- this ,
120- "requestStateHandlerSourceMapping" ,
121- {
122- target : requestStateHandler ,
123- ...eventSourceMappingOptions ,
124- }
125- ) ;
126- const requestCfnSourceMapping = requestStateSourceMapping . node
127- . defaultChild as CfnEventSourceMapping ;
128- requestCfnSourceMapping . addPropertyOverride ( "FilterCriteria" , {
129- Filters : [
130- {
131- Pattern : JSON . stringify ( {
121+ requestStateHandler . addEventSource (
122+ new DynamoEventSource ( friendTable , {
123+ filters : [
124+ FilterCriteria . filter ( {
125+ eventName : FilterRule . isEqual ( "INSERT" ) ,
132126 dynamodb : {
133127 NewImage : {
134- state : { S : [ State . Requested ] } ,
128+ state : { S : FilterRule . isEqual ( State . Requested ) } ,
135129 } ,
136130 } ,
137- eventName : [ "INSERT" ] ,
138131 } ) ,
139- } ,
140- ] ,
141- } ) ;
142-
143- const acceptStateSourceMapping = new EventSourceMapping (
144- this ,
145- "acceptStateHandlerSourceMapping" ,
146- {
147- target : acceptStateHandler ,
148- ...eventSourceMappingOptions ,
149- }
132+ ] ,
133+ ...streamEventSourceProps ,
134+ } )
150135 ) ;
151- const acceptCfnSourceMapping = acceptStateSourceMapping . node
152- . defaultChild as CfnEventSourceMapping ;
153- acceptCfnSourceMapping . addPropertyOverride ( "FilterCriteria" , {
154- Filters : [
155- {
156- Pattern : JSON . stringify ( {
136+
137+ acceptStateHandler . addEventSource (
138+ new DynamoEventSource ( friendTable , {
139+ filters : [
140+ FilterCriteria . filter ( {
141+ eventName : FilterRule . isEqual ( "MODIFY" ) ,
157142 dynamodb : {
158143 NewImage : {
159- state : { S : [ State . Friends ] } ,
144+ state : { S : FilterRule . isEqual ( State . Friends ) } ,
160145 } ,
161146 OldImage : {
162- state : { S : [ State . Pending ] } ,
147+ state : { S : FilterRule . isEqual ( State . Pending ) } ,
163148 } ,
164149 } ,
165- eventName : [ "MODIFY" ] ,
166150 } ) ,
167- } ,
168- ] ,
169- } ) ;
170-
171- const rejectStateSourceMapping = new EventSourceMapping (
172- this ,
173- "rejectStateHandlerSourceMapping" ,
174- {
175- target : rejectStateHandler ,
176- ...eventSourceMappingOptions ,
177- }
151+ ] ,
152+ ...streamEventSourceProps ,
153+ } )
178154 ) ;
179- const rejectCfnSourceMapping = rejectStateSourceMapping . node
180- . defaultChild as CfnEventSourceMapping ;
181- rejectCfnSourceMapping . addPropertyOverride ( "FilterCriteria" , {
182- Filters : [
183- {
184- Pattern : JSON . stringify ( {
155+
156+ rejectStateHandler . addEventSource (
157+ new DynamoEventSource ( friendTable , {
158+ filters : [
159+ FilterCriteria . filter ( {
160+ eventName : FilterRule . isEqual ( "REMOVE" ) ,
185161 dynamodb : {
186162 OldImage : {
187- state : { S : [ State . Pending ] } ,
163+ state : { S : FilterRule . isEqual ( State . Pending ) } ,
188164 } ,
189165 } ,
190- eventName : [ "REMOVE" ] ,
191166 } ) ,
192- } ,
193- ] ,
194- } ) ;
195-
196- const unfriendStateSourceMapping = new EventSourceMapping (
197- this ,
198- "unfriendStateHandlerSourceMapping" ,
199- {
200- target : unfriendStateHandler ,
201- ...eventSourceMappingOptions ,
202- }
167+ ] ,
168+ ...streamEventSourceProps ,
169+ } )
203170 ) ;
204- const unfriendCfnSourceMapping = unfriendStateSourceMapping . node
205- . defaultChild as CfnEventSourceMapping ;
206- unfriendCfnSourceMapping . addPropertyOverride ( "FilterCriteria" , {
207- Filters : [
208- {
209- Pattern : JSON . stringify ( {
171+
172+ unfriendStateHandler . addEventSource (
173+ new DynamoEventSource ( friendTable , {
174+ filters : [
175+ FilterCriteria . filter ( {
176+ eventName : FilterRule . isEqual ( "REMOVE" ) ,
210177 dynamodb : {
211178 OldImage : {
212- state : { S : [ State . Friends ] } ,
179+ state : { S : FilterRule . isEqual ( State . Friends ) } ,
213180 } ,
214181 } ,
215- eventName : [ "REMOVE" ] ,
216182 } ) ,
217- } ,
218- ] ,
219- } ) ;
183+ ] ,
184+ ...streamEventSourceProps ,
185+ } )
186+ ) ;
220187
221188 const readAPI = new LambdaRestApi ( this , "readAPI" , {
222189 handler : readHandler ,
0 commit comments