Skip to content

Commit de4fad7

Browse files
refactor: change event source mapping implementation from L1 to L2 (#1)
1 parent 5161051 commit de4fad7

File tree

3 files changed

+87
-95
lines changed

3 files changed

+87
-95
lines changed

lib/friend-microservices-stack.ts

Lines changed: 50 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ import {
66
} from "aws-cdk-lib/aws-dynamodb";
77
import { Construct } from "constructs";
88
import {
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";
2120
import { Queue } from "aws-cdk-lib/aws-sqs";
2221
import { 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";
2428
import { LambdaRestApi } from "aws-cdk-lib/aws-apigateway";
2529

2630
const 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,

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"@types/aws-lambda": "^8.10.101",
1515
"@types/jest": "^28.1.5",
1616
"@types/node": "18.0.4",
17-
"aws-cdk": "2.31.2",
17+
"aws-cdk": "2.54.0",
1818
"jest": "^28.1.3",
1919
"prettier": "^2.7.1",
2020
"ts-jest": "^28.0.6",
@@ -23,7 +23,7 @@
2323
},
2424
"dependencies": {
2525
"aigle": "^1.14.1",
26-
"aws-cdk-lib": "2.31.2",
26+
"aws-cdk-lib": "2.54.0",
2727
"aws-sdk": "^2.1174.0",
2828
"constructs": "^10.0.0",
2929
"source-map-support": "^0.5.16"

yarn.lock

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@
1010
"@jridgewell/gen-mapping" "^0.1.0"
1111
"@jridgewell/trace-mapping" "^0.3.9"
1212

13+
"@aws-cdk/asset-awscli-v1@^2.2.16":
14+
version "2.2.30"
15+
resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.30.tgz#68bcbeacce590fcc0570c9e3cfc48b2ec6de9a9f"
16+
integrity sha512-mFRF5n1jxjKpX8ZZSCRhJc6Hj8BkeZFUPwK0j6jRcouQQZHsZyydbf4UuzMYQ4SZU6cCLM7DKmWO0Kx156ZSnw==
17+
18+
"@aws-cdk/asset-kubectl-v20@^2.1.1":
19+
version "2.1.1"
20+
resolved "https://registry.yarnpkg.com/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.1.tgz#d01c1efb867fb7f2cfd8c8b230b8eae16447e156"
21+
integrity sha512-U1ntiX8XiMRRRH5J1IdC+1t5CE89015cwyt5U63Cpk0GnMlN5+h9WsWMlKlPXZR4rdq/m806JRlBMRpBUB2Dhw==
22+
23+
"@aws-cdk/asset-node-proxy-agent-v5@^2.0.21":
24+
version "2.0.36"
25+
resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v5/-/asset-node-proxy-agent-v5-2.0.36.tgz#2a6b24a31779d54a8e4e4e0b1cca41dc5d572baa"
26+
integrity sha512-acG7qHXrLXGVsOnkHNrNfzGaMtONZ+2nsjhUXhCRf9zQZMzs7lzkv9dTUaHJywAABR9DaRRUFMpUytJDqvN8Ew==
27+
1328
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6":
1429
version "7.18.6"
1530
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
@@ -774,25 +789,28 @@ available-typed-arrays@^1.0.5:
774789
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
775790
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
776791

777-
aws-cdk-lib@2.31.2:
778-
version "2.31.2"
779-
resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.31.2.tgz#bff2f28270d4c1be3b3cf646ed324927c6df92e8"
780-
integrity sha512-IVma4LYr8Kr82d9NJj3qvau7kHGiFYX51+7UH7TbQokkal/EKv15Lt0q+Oo1xHDzSCV0hh8q+5k1gS/uhhTWUg==
792+
aws-cdk-lib@2.54.0:
793+
version "2.54.0"
794+
resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.54.0.tgz#5271a4061a5be674e53815bf812d186be84855fe"
795+
integrity sha512-DooUehpsNnFY2WjIxtXNBF37PTCvFSNK6E5c9cYpgQiofF3ayT7h7ppFhoWrc53trV3hw544kZDWL6aJszXCaA==
781796
dependencies:
797+
"@aws-cdk/asset-awscli-v1" "^2.2.16"
798+
"@aws-cdk/asset-kubectl-v20" "^2.1.1"
799+
"@aws-cdk/asset-node-proxy-agent-v5" "^2.0.21"
782800
"@balena/dockerignore" "^1.0.2"
783801
case "1.6.3"
784802
fs-extra "^9.1.0"
785803
ignore "^5.2.0"
786804
jsonschema "^1.4.1"
787805
minimatch "^3.1.2"
788806
punycode "^2.1.1"
789-
semver "^7.3.7"
807+
semver "^7.3.8"
790808
yaml "1.10.2"
791809

792-
aws-cdk@2.31.2:
793-
version "2.31.2"
794-
resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-2.31.2.tgz#37cc1a7d252cc1ede0dc8562f2b7da0ae1b3657a"
795-
integrity sha512-pDnRUb9/2mD1MyvO2mccyzhLVJWiV7G5wvU0Mu0VOWCsCa0FBJPjN8H1wA9XZEcErqzHIRlpoCmtGr2Ie3Jd6A==
810+
aws-cdk@2.54.0:
811+
version "2.54.0"
812+
resolved "https://registry.yarnpkg.com/aws-cdk/-/aws-cdk-2.54.0.tgz#bb1b033dd82e8be8fa2cdabdc7004d01ef0ca4f6"
813+
integrity sha512-Muk4/cS5SrwPmj4wCoXEXubknIMaIBGteb8dohWFFyAr3I6QrvZ+41EkVvhPnEQEeJpzZQ2Qa65HxgoRC6WMhw==
796814
optionalDependencies:
797815
fsevents "2.3.2"
798816

@@ -2386,7 +2404,7 @@ sax@>=0.6.0:
23862404
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
23872405
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
23882406

2389-
semver@7.x, semver@^7.3.5, semver@^7.3.7:
2407+
semver@7.x, semver@^7.3.5:
23902408
version "7.3.7"
23912409
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
23922410
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
@@ -2398,6 +2416,13 @@ semver@^6.0.0, semver@^6.3.0:
23982416
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
23992417
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
24002418

2419+
semver@^7.3.8:
2420+
version "7.3.8"
2421+
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
2422+
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
2423+
dependencies:
2424+
lru-cache "^6.0.0"
2425+
24012426
shebang-command@^2.0.0:
24022427
version "2.0.0"
24032428
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"

0 commit comments

Comments
 (0)