16
16
17
17
import static java .util .Collections .singletonList ;
18
18
19
- import com .amazonaws .services .lambda .runtime .events .KinesisEvent ;
20
19
import com .fasterxml .jackson .databind .JsonNode ;
21
20
import java .io .File ;
22
21
import java .io .IOException ;
46
45
import software .amazon .awscdk .services .appconfig .CfnDeploymentStrategy ;
47
46
import software .amazon .awscdk .services .appconfig .CfnEnvironment ;
48
47
import software .amazon .awscdk .services .appconfig .CfnHostedConfigurationVersion ;
49
- import software .amazon .awscdk .services .dynamodb .Attribute ;
50
- import software .amazon .awscdk .services .dynamodb .AttributeType ;
51
- import software .amazon .awscdk .services .dynamodb .BillingMode ;
52
- import software .amazon .awscdk .services .dynamodb .Table ;
53
- import software .amazon .awscdk .services .events .targets .KinesisStream ;
48
+ import software .amazon .awscdk .services .dynamodb .*;
54
49
import software .amazon .awscdk .services .iam .PolicyStatement ;
55
50
import software .amazon .awscdk .services .kinesis .Stream ;
56
51
import software .amazon .awscdk .services .kinesis .StreamMode ;
57
52
import software .amazon .awscdk .services .lambda .Code ;
58
53
import software .amazon .awscdk .services .lambda .Function ;
59
54
import software .amazon .awscdk .services .lambda .StartingPosition ;
60
55
import software .amazon .awscdk .services .lambda .Tracing ;
56
+ import software .amazon .awscdk .services .lambda .eventsources .DynamoEventSource ;
61
57
import software .amazon .awscdk .services .lambda .eventsources .KinesisEventSource ;
62
58
import software .amazon .awscdk .services .lambda .eventsources .SqsEventSource ;
63
59
import software .amazon .awscdk .services .logs .LogGroup ;
@@ -118,6 +114,7 @@ public class Infrastructure {
118
114
private final String queue ;
119
115
private final String kinesisStream ;
120
116
private final String largeMessagesBucket ;
117
+ private String ddbStreamsTableName ;
121
118
122
119
private String functionName ;
123
120
private Object cfnTemplate ;
@@ -135,6 +132,7 @@ private Infrastructure(Builder builder) {
135
132
this .queue = builder .queue ;
136
133
this .kinesisStream = builder .kinesisStream ;
137
134
this .largeMessagesBucket = builder .largeMessagesBucket ;
135
+ this .ddbStreamsTableName = builder .ddbStreamsTableName ;
138
136
139
137
this .app = new App ();
140
138
this .stack = createStackWithLambda ();
@@ -317,6 +315,23 @@ private Stack createStackWithLambda() {
317
315
.build ();
318
316
}
319
317
318
+ if (!StringUtils .isEmpty (ddbStreamsTableName )) {
319
+ Table ddbStreamsTable = Table .Builder .create (stack , "DDBStreamsTable" )
320
+ .tableName (ddbStreamsTableName )
321
+ .stream (StreamViewType .KEYS_ONLY )
322
+ .removalPolicy (RemovalPolicy .DESTROY )
323
+ .partitionKey (Attribute .builder ().name ("id" ).type (AttributeType .STRING ).build ())
324
+ .build ();
325
+
326
+ DynamoEventSource ddbEventSource = DynamoEventSource .Builder .create (ddbStreamsTable )
327
+ .batchSize (1 )
328
+ .startingPosition (StartingPosition .TRIM_HORIZON )
329
+ .maxBatchingWindow (Duration .seconds (1 ))
330
+ .build ();
331
+ function .addEventSource (ddbEventSource );
332
+ CfnOutput .Builder .create (stack , "DdbStreamsTestTable" ).value (ddbStreamsTable .getTableName ()).build ();
333
+ }
334
+
320
335
if (!StringUtils .isEmpty (largeMessagesBucket )) {
321
336
Bucket offloadBucket = Bucket .Builder
322
337
.create (stack , "LargeMessagesOffloadBucket" )
@@ -481,6 +496,7 @@ public static class Builder {
481
496
private String idemPotencyTable ;
482
497
private String queue ;
483
498
private String kinesisStream ;
499
+ private String ddbStreamsTableName ;
484
500
485
501
private Builder () {
486
502
getJavaRuntime ();
@@ -561,6 +577,11 @@ public Builder kinesisStream(String stream) {
561
577
return this ;
562
578
}
563
579
580
+ public Builder ddbStreamsTableName (String tableName ) {
581
+ this .ddbStreamsTableName = tableName ;
582
+ return this ;
583
+ }
584
+
564
585
public Builder largeMessagesBucket (String largeMessagesBucket ) {
565
586
this .largeMessagesBucket = largeMessagesBucket ;
566
587
return this ;
0 commit comments