Skip to content

Commit ecd7374

Browse files
authored
feat(lambda-event-sources): Add eventsourceMappingArn to IEventSourceMapping (#24991)
Currently the eventsourceMappingArn (for example for SQS Lambda Trigger) needs to be constructed manually: `arn:aws:lambda:eu-west-1:ACCOUNT_ID:event-source-mapping:EVENTSOURCEMAPPINGID` With this change its no longer needed to construct it manually. The solution now exposes the `eventSourceMappingArn` on the `IEventSourceMapping`. The ARN is constructed by the individual components (`service, resource, resourceName/eventSourceMappingId` and `format`). I considered adding a static method `fromEventSourceMappingArn` to the `EventSourceMapping` class. Wasnt sure if it provides any value, but let me know if you think its a good Idea to add it. ~Sidenote: I had a bit of a struggle to build the project (during development I had a lot of heap memory issues). Additionally I wasnt able to execute the integration tests, I tried to follow https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md#running-integration-tests but either I make something wrong or the guide seems out of date? Would be great if I get some pointers in the right direction.~ Closes #24801 . ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent 3ea6062 commit ecd7374

30 files changed

+446
-92
lines changed
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"version":"20.0.0"}
1+
{"version":"31.0.0"}

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.dynamodb.js.snapshot/integ.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "20.0.0",
2+
"version": "31.0.0",
33
"testCases": {
44
"integ.dynamodb": {
55
"stacks": [

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.dynamodb.js.snapshot/lambda-event-source-dynamodb.assets.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
2-
"version": "20.0.0",
2+
"version": "31.0.0",
33
"files": {
4-
"e143da2a8687914f63b1adc3553d6af9014851503b71a4e1d068416fd906061e": {
4+
"3bd69e1fd092b2d77dfe5884db2c3213c0c79d892c1fef9c3e4d29fb7f33547e": {
55
"source": {
66
"path": "lambda-event-source-dynamodb.template.json",
77
"packaging": "file"
88
},
99
"destinations": {
1010
"current_account-current_region": {
1111
"bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
12-
"objectKey": "e143da2a8687914f63b1adc3553d6af9014851503b71a4e1d068416fd906061e.json",
12+
"objectKey": "3bd69e1fd092b2d77dfe5884db2c3213c0c79d892c1fef9c3e4d29fb7f33547e.json",
1313
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
1414
}
1515
}

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.dynamodb.js.snapshot/lambda-event-source-dynamodb.template.json

+27
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,33 @@
130130
"DeletionPolicy": "Delete"
131131
}
132132
},
133+
"Outputs": {
134+
"OutputEventSourceMappingArn": {
135+
"Value": {
136+
"Fn::Join": [
137+
"",
138+
[
139+
"arn:",
140+
{
141+
"Ref": "AWS::Partition"
142+
},
143+
":lambda:",
144+
{
145+
"Ref": "AWS::Region"
146+
},
147+
":",
148+
{
149+
"Ref": "AWS::AccountId"
150+
},
151+
":event-source-mapping:",
152+
{
153+
"Ref": "FDynamoDBEventSourcelambdaeventsourcedynamodbT7967476AE652DA48"
154+
}
155+
]
156+
]
157+
}
158+
}
159+
},
133160
"Parameters": {
134161
"BootstrapVersion": {
135162
"Type": "AWS::SSM::Parameter::Value<String>",

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.dynamodb.js.snapshot/manifest.json

+14-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
{
2-
"version": "20.0.0",
2+
"version": "31.0.0",
33
"artifacts": {
4-
"Tree": {
5-
"type": "cdk:tree",
6-
"properties": {
7-
"file": "tree.json"
8-
}
9-
},
104
"lambda-event-source-dynamodb.assets": {
115
"type": "cdk:asset-manifest",
126
"properties": {
@@ -23,7 +17,7 @@
2317
"validateOnSynth": false,
2418
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
2519
"cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
26-
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e143da2a8687914f63b1adc3553d6af9014851503b71a4e1d068416fd906061e.json",
20+
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/3bd69e1fd092b2d77dfe5884db2c3213c0c79d892c1fef9c3e4d29fb7f33547e.json",
2721
"requiresBootstrapStackVersion": 6,
2822
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
2923
"additionalDependencies": [
@@ -69,6 +63,12 @@
6963
"data": "TD925BC7E"
7064
}
7165
],
66+
"/lambda-event-source-dynamodb/OutputEventSourceMappingArn": [
67+
{
68+
"type": "aws:cdk:logicalId",
69+
"data": "OutputEventSourceMappingArn"
70+
}
71+
],
7272
"/lambda-event-source-dynamodb/BootstrapVersion": [
7373
{
7474
"type": "aws:cdk:logicalId",
@@ -83,6 +83,12 @@
8383
]
8484
},
8585
"displayName": "lambda-event-source-dynamodb"
86+
},
87+
"Tree": {
88+
"type": "cdk:tree",
89+
"properties": {
90+
"file": "tree.json"
91+
}
8692
}
8793
}
8894
}

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.dynamodb.js.snapshot/tree.json

+55-23
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,6 @@
44
"id": "App",
55
"path": "",
66
"children": {
7-
"Tree": {
8-
"id": "Tree",
9-
"path": "Tree",
10-
"constructInfo": {
11-
"fqn": "constructs.Construct",
12-
"version": "10.1.85"
13-
}
14-
},
157
"lambda-event-source-dynamodb": {
168
"id": "lambda-event-source-dynamodb",
179
"path": "lambda-event-source-dynamodb",
@@ -24,6 +16,14 @@
2416
"id": "ServiceRole",
2517
"path": "lambda-event-source-dynamodb/F/ServiceRole",
2618
"children": {
19+
"ImportServiceRole": {
20+
"id": "ImportServiceRole",
21+
"path": "lambda-event-source-dynamodb/F/ServiceRole/ImportServiceRole",
22+
"constructInfo": {
23+
"fqn": "aws-cdk-lib.Resource",
24+
"version": "0.0.0"
25+
}
26+
},
2727
"Resource": {
2828
"id": "Resource",
2929
"path": "lambda-event-source-dynamodb/F/ServiceRole/Resource",
@@ -59,7 +59,7 @@
5959
}
6060
},
6161
"constructInfo": {
62-
"fqn": "@aws-cdk/aws-iam.CfnRole",
62+
"fqn": "aws-cdk-lib.aws_iam.CfnRole",
6363
"version": "0.0.0"
6464
}
6565
},
@@ -106,19 +106,19 @@
106106
}
107107
},
108108
"constructInfo": {
109-
"fqn": "@aws-cdk/aws-iam.CfnPolicy",
109+
"fqn": "aws-cdk-lib.aws_iam.CfnPolicy",
110110
"version": "0.0.0"
111111
}
112112
}
113113
},
114114
"constructInfo": {
115-
"fqn": "@aws-cdk/aws-iam.Policy",
115+
"fqn": "aws-cdk-lib.aws_iam.Policy",
116116
"version": "0.0.0"
117117
}
118118
}
119119
},
120120
"constructInfo": {
121-
"fqn": "@aws-cdk/aws-iam.Role",
121+
"fqn": "aws-cdk-lib.aws_iam.Role",
122122
"version": "0.0.0"
123123
}
124124
},
@@ -142,7 +142,7 @@
142142
}
143143
},
144144
"constructInfo": {
145-
"fqn": "@aws-cdk/aws-lambda.CfnFunction",
145+
"fqn": "aws-cdk-lib.aws_lambda.CfnFunction",
146146
"version": "0.0.0"
147147
}
148148
},
@@ -171,19 +171,19 @@
171171
}
172172
},
173173
"constructInfo": {
174-
"fqn": "@aws-cdk/aws-lambda.CfnEventSourceMapping",
174+
"fqn": "aws-cdk-lib.aws_lambda.CfnEventSourceMapping",
175175
"version": "0.0.0"
176176
}
177177
}
178178
},
179179
"constructInfo": {
180-
"fqn": "@aws-cdk/aws-lambda.EventSourceMapping",
180+
"fqn": "aws-cdk-lib.aws_lambda.EventSourceMapping",
181181
"version": "0.0.0"
182182
}
183183
}
184184
},
185185
"constructInfo": {
186-
"fqn": "@aws-cdk/aws-lambda.Function",
186+
"fqn": "aws-cdk-lib.aws_lambda.Function",
187187
"version": "0.0.0"
188188
}
189189
},
@@ -219,34 +219,66 @@
219219
}
220220
},
221221
"constructInfo": {
222-
"fqn": "@aws-cdk/aws-dynamodb.CfnTable",
222+
"fqn": "aws-cdk-lib.aws_dynamodb.CfnTable",
223223
"version": "0.0.0"
224224
}
225225
},
226226
"ScalingRole": {
227227
"id": "ScalingRole",
228228
"path": "lambda-event-source-dynamodb/T/ScalingRole",
229229
"constructInfo": {
230-
"fqn": "constructs.Construct",
231-
"version": "10.1.85"
230+
"fqn": "aws-cdk-lib.Resource",
231+
"version": "0.0.0"
232232
}
233233
}
234234
},
235235
"constructInfo": {
236-
"fqn": "@aws-cdk/aws-dynamodb.Table",
236+
"fqn": "aws-cdk-lib.aws_dynamodb.Table",
237+
"version": "0.0.0"
238+
}
239+
},
240+
"OutputEventSourceMappingArn": {
241+
"id": "OutputEventSourceMappingArn",
242+
"path": "lambda-event-source-dynamodb/OutputEventSourceMappingArn",
243+
"constructInfo": {
244+
"fqn": "aws-cdk-lib.CfnOutput",
245+
"version": "0.0.0"
246+
}
247+
},
248+
"BootstrapVersion": {
249+
"id": "BootstrapVersion",
250+
"path": "lambda-event-source-dynamodb/BootstrapVersion",
251+
"constructInfo": {
252+
"fqn": "aws-cdk-lib.CfnParameter",
253+
"version": "0.0.0"
254+
}
255+
},
256+
"CheckBootstrapVersion": {
257+
"id": "CheckBootstrapVersion",
258+
"path": "lambda-event-source-dynamodb/CheckBootstrapVersion",
259+
"constructInfo": {
260+
"fqn": "aws-cdk-lib.CfnRule",
237261
"version": "0.0.0"
238262
}
239263
}
240264
},
265+
"constructInfo": {
266+
"fqn": "aws-cdk-lib.Stack",
267+
"version": "0.0.0"
268+
}
269+
},
270+
"Tree": {
271+
"id": "Tree",
272+
"path": "Tree",
241273
"constructInfo": {
242274
"fqn": "constructs.Construct",
243-
"version": "10.1.85"
275+
"version": "10.1.270"
244276
}
245277
}
246278
},
247279
"constructInfo": {
248-
"fqn": "constructs.Construct",
249-
"version": "10.1.85"
280+
"fqn": "aws-cdk-lib.App",
281+
"version": "0.0.0"
250282
}
251283
}
252284
}

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.dynamodb.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@ class DynamoEventSourceTest extends cdk.Stack {
1717
stream: dynamodb.StreamViewType.NEW_IMAGE,
1818
removalPolicy: cdk.RemovalPolicy.DESTROY,
1919
});
20-
21-
fn.addEventSource(new DynamoEventSource(queue, {
20+
const eventSource = new DynamoEventSource(queue, {
2221
batchSize: 5,
2322
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
2423
tumblingWindow: cdk.Duration.seconds(60),
25-
}));
24+
});
25+
26+
fn.addEventSource(eventSource);
27+
28+
new cdk.CfnOutput(this, 'OutputEventSourceMappingArn', { value: eventSource.eventSourceMappingArn });
2629
}
2730
}
2831

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.kinesis.js.snapshot/lambda-event-source-kinesis.assets.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
22
"version": "31.0.0",
33
"files": {
4-
"95e2148d1ebc26fd910572145857d4425136c06c8c3eccf43e585af4a0e73db7": {
4+
"a93b796326a3eeeb540403c10cdf6cf3b003fe7da5e559e2182f0036ff06e342": {
55
"source": {
66
"path": "lambda-event-source-kinesis.template.json",
77
"packaging": "file"
88
},
99
"destinations": {
1010
"current_account-current_region": {
1111
"bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
12-
"objectKey": "95e2148d1ebc26fd910572145857d4425136c06c8c3eccf43e585af4a0e73db7.json",
12+
"objectKey": "a93b796326a3eeeb540403c10cdf6cf3b003fe7da5e559e2182f0036ff06e342.json",
1313
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
1414
}
1515
}

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.kinesis.js.snapshot/lambda-event-source-kinesis.template.json

+27
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,33 @@
145145
]
146146
}
147147
},
148+
"Outputs": {
149+
"OutputEventSourceMappingArn": {
150+
"Value": {
151+
"Fn::Join": [
152+
"",
153+
[
154+
"arn:",
155+
{
156+
"Ref": "AWS::Partition"
157+
},
158+
":lambda:",
159+
{
160+
"Ref": "AWS::Region"
161+
},
162+
":",
163+
{
164+
"Ref": "AWS::AccountId"
165+
},
166+
":event-source-mapping:",
167+
{
168+
"Ref": "FKinesisEventSourcelambdaeventsourcekinesisQ645CE7DB2D6BCCF5"
169+
}
170+
]
171+
]
172+
}
173+
}
174+
},
148175
"Parameters": {
149176
"BootstrapVersion": {
150177
"Type": "AWS::SSM::Parameter::Value<String>",

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.kinesis.js.snapshot/manifest.json

+7-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"validateOnSynth": false,
1818
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
1919
"cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
20-
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/95e2148d1ebc26fd910572145857d4425136c06c8c3eccf43e585af4a0e73db7.json",
20+
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/a93b796326a3eeeb540403c10cdf6cf3b003fe7da5e559e2182f0036ff06e342.json",
2121
"requiresBootstrapStackVersion": 6,
2222
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
2323
"additionalDependencies": [
@@ -69,6 +69,12 @@
6969
"data": "AwsCdkKinesisEncryptedStreamsUnsupportedRegions"
7070
}
7171
],
72+
"/lambda-event-source-kinesis/OutputEventSourceMappingArn": [
73+
{
74+
"type": "aws:cdk:logicalId",
75+
"data": "OutputEventSourceMappingArn"
76+
}
77+
],
7278
"/lambda-event-source-kinesis/BootstrapVersion": [
7379
{
7480
"type": "aws:cdk:logicalId",

packages/@aws-cdk-testing/framework-integ/test/aws-lambda-event-sources/test/integ.kinesis.js.snapshot/tree.json

+8
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,14 @@
232232
"version": "0.0.0"
233233
}
234234
},
235+
"OutputEventSourceMappingArn": {
236+
"id": "OutputEventSourceMappingArn",
237+
"path": "lambda-event-source-kinesis/OutputEventSourceMappingArn",
238+
"constructInfo": {
239+
"fqn": "aws-cdk-lib.CfnOutput",
240+
"version": "0.0.0"
241+
}
242+
},
235243
"BootstrapVersion": {
236244
"id": "BootstrapVersion",
237245
"path": "lambda-event-source-kinesis/BootstrapVersion",

0 commit comments

Comments
 (0)