Skip to content

Commit

Permalink
feat(lambda-event-sources): Add eventsourceMappingArn to IEventSource…
Browse files Browse the repository at this point in the history
…Mapping (#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*
  • Loading branch information
WtfJoke authored Apr 24, 2023
1 parent 3ea6062 commit ecd7374
Show file tree
Hide file tree
Showing 30 changed files with 446 additions and 92 deletions.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"version":"20.0.0"}
{"version":"31.0.0"}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": "20.0.0",
"version": "31.0.0",
"testCases": {
"integ.dynamodb": {
"stacks": [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"version": "20.0.0",
"version": "31.0.0",
"files": {
"e143da2a8687914f63b1adc3553d6af9014851503b71a4e1d068416fd906061e": {
"3bd69e1fd092b2d77dfe5884db2c3213c0c79d892c1fef9c3e4d29fb7f33547e": {
"source": {
"path": "lambda-event-source-dynamodb.template.json",
"packaging": "file"
},
"destinations": {
"current_account-current_region": {
"bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
"objectKey": "e143da2a8687914f63b1adc3553d6af9014851503b71a4e1d068416fd906061e.json",
"objectKey": "3bd69e1fd092b2d77dfe5884db2c3213c0c79d892c1fef9c3e4d29fb7f33547e.json",
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,33 @@
"DeletionPolicy": "Delete"
}
},
"Outputs": {
"OutputEventSourceMappingArn": {
"Value": {
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":lambda:",
{
"Ref": "AWS::Region"
},
":",
{
"Ref": "AWS::AccountId"
},
":event-source-mapping:",
{
"Ref": "FDynamoDBEventSourcelambdaeventsourcedynamodbT7967476AE652DA48"
}
]
]
}
}
},
"Parameters": {
"BootstrapVersion": {
"Type": "AWS::SSM::Parameter::Value<String>",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
{
"version": "20.0.0",
"version": "31.0.0",
"artifacts": {
"Tree": {
"type": "cdk:tree",
"properties": {
"file": "tree.json"
}
},
"lambda-event-source-dynamodb.assets": {
"type": "cdk:asset-manifest",
"properties": {
Expand All @@ -23,7 +17,7 @@
"validateOnSynth": false,
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
"cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e143da2a8687914f63b1adc3553d6af9014851503b71a4e1d068416fd906061e.json",
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/3bd69e1fd092b2d77dfe5884db2c3213c0c79d892c1fef9c3e4d29fb7f33547e.json",
"requiresBootstrapStackVersion": 6,
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
"additionalDependencies": [
Expand Down Expand Up @@ -69,6 +63,12 @@
"data": "TD925BC7E"
}
],
"/lambda-event-source-dynamodb/OutputEventSourceMappingArn": [
{
"type": "aws:cdk:logicalId",
"data": "OutputEventSourceMappingArn"
}
],
"/lambda-event-source-dynamodb/BootstrapVersion": [
{
"type": "aws:cdk:logicalId",
Expand All @@ -83,6 +83,12 @@
]
},
"displayName": "lambda-event-source-dynamodb"
},
"Tree": {
"type": "cdk:tree",
"properties": {
"file": "tree.json"
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,6 @@
"id": "App",
"path": "",
"children": {
"Tree": {
"id": "Tree",
"path": "Tree",
"constructInfo": {
"fqn": "constructs.Construct",
"version": "10.1.85"
}
},
"lambda-event-source-dynamodb": {
"id": "lambda-event-source-dynamodb",
"path": "lambda-event-source-dynamodb",
Expand All @@ -24,6 +16,14 @@
"id": "ServiceRole",
"path": "lambda-event-source-dynamodb/F/ServiceRole",
"children": {
"ImportServiceRole": {
"id": "ImportServiceRole",
"path": "lambda-event-source-dynamodb/F/ServiceRole/ImportServiceRole",
"constructInfo": {
"fqn": "aws-cdk-lib.Resource",
"version": "0.0.0"
}
},
"Resource": {
"id": "Resource",
"path": "lambda-event-source-dynamodb/F/ServiceRole/Resource",
Expand Down Expand Up @@ -59,7 +59,7 @@
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-iam.CfnRole",
"fqn": "aws-cdk-lib.aws_iam.CfnRole",
"version": "0.0.0"
}
},
Expand Down Expand Up @@ -106,19 +106,19 @@
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-iam.CfnPolicy",
"fqn": "aws-cdk-lib.aws_iam.CfnPolicy",
"version": "0.0.0"
}
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-iam.Policy",
"fqn": "aws-cdk-lib.aws_iam.Policy",
"version": "0.0.0"
}
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-iam.Role",
"fqn": "aws-cdk-lib.aws_iam.Role",
"version": "0.0.0"
}
},
Expand All @@ -142,7 +142,7 @@
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-lambda.CfnFunction",
"fqn": "aws-cdk-lib.aws_lambda.CfnFunction",
"version": "0.0.0"
}
},
Expand Down Expand Up @@ -171,19 +171,19 @@
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-lambda.CfnEventSourceMapping",
"fqn": "aws-cdk-lib.aws_lambda.CfnEventSourceMapping",
"version": "0.0.0"
}
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-lambda.EventSourceMapping",
"fqn": "aws-cdk-lib.aws_lambda.EventSourceMapping",
"version": "0.0.0"
}
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-lambda.Function",
"fqn": "aws-cdk-lib.aws_lambda.Function",
"version": "0.0.0"
}
},
Expand Down Expand Up @@ -219,34 +219,66 @@
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-dynamodb.CfnTable",
"fqn": "aws-cdk-lib.aws_dynamodb.CfnTable",
"version": "0.0.0"
}
},
"ScalingRole": {
"id": "ScalingRole",
"path": "lambda-event-source-dynamodb/T/ScalingRole",
"constructInfo": {
"fqn": "constructs.Construct",
"version": "10.1.85"
"fqn": "aws-cdk-lib.Resource",
"version": "0.0.0"
}
}
},
"constructInfo": {
"fqn": "@aws-cdk/aws-dynamodb.Table",
"fqn": "aws-cdk-lib.aws_dynamodb.Table",
"version": "0.0.0"
}
},
"OutputEventSourceMappingArn": {
"id": "OutputEventSourceMappingArn",
"path": "lambda-event-source-dynamodb/OutputEventSourceMappingArn",
"constructInfo": {
"fqn": "aws-cdk-lib.CfnOutput",
"version": "0.0.0"
}
},
"BootstrapVersion": {
"id": "BootstrapVersion",
"path": "lambda-event-source-dynamodb/BootstrapVersion",
"constructInfo": {
"fqn": "aws-cdk-lib.CfnParameter",
"version": "0.0.0"
}
},
"CheckBootstrapVersion": {
"id": "CheckBootstrapVersion",
"path": "lambda-event-source-dynamodb/CheckBootstrapVersion",
"constructInfo": {
"fqn": "aws-cdk-lib.CfnRule",
"version": "0.0.0"
}
}
},
"constructInfo": {
"fqn": "aws-cdk-lib.Stack",
"version": "0.0.0"
}
},
"Tree": {
"id": "Tree",
"path": "Tree",
"constructInfo": {
"fqn": "constructs.Construct",
"version": "10.1.85"
"version": "10.1.270"
}
}
},
"constructInfo": {
"fqn": "constructs.Construct",
"version": "10.1.85"
"fqn": "aws-cdk-lib.App",
"version": "0.0.0"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@ class DynamoEventSourceTest extends cdk.Stack {
stream: dynamodb.StreamViewType.NEW_IMAGE,
removalPolicy: cdk.RemovalPolicy.DESTROY,
});

fn.addEventSource(new DynamoEventSource(queue, {
const eventSource = new DynamoEventSource(queue, {
batchSize: 5,
startingPosition: lambda.StartingPosition.TRIM_HORIZON,
tumblingWindow: cdk.Duration.seconds(60),
}));
});

fn.addEventSource(eventSource);

new cdk.CfnOutput(this, 'OutputEventSourceMappingArn', { value: eventSource.eventSourceMappingArn });
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"version": "31.0.0",
"files": {
"95e2148d1ebc26fd910572145857d4425136c06c8c3eccf43e585af4a0e73db7": {
"a93b796326a3eeeb540403c10cdf6cf3b003fe7da5e559e2182f0036ff06e342": {
"source": {
"path": "lambda-event-source-kinesis.template.json",
"packaging": "file"
},
"destinations": {
"current_account-current_region": {
"bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
"objectKey": "95e2148d1ebc26fd910572145857d4425136c06c8c3eccf43e585af4a0e73db7.json",
"objectKey": "a93b796326a3eeeb540403c10cdf6cf3b003fe7da5e559e2182f0036ff06e342.json",
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,33 @@
]
}
},
"Outputs": {
"OutputEventSourceMappingArn": {
"Value": {
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":lambda:",
{
"Ref": "AWS::Region"
},
":",
{
"Ref": "AWS::AccountId"
},
":event-source-mapping:",
{
"Ref": "FKinesisEventSourcelambdaeventsourcekinesisQ645CE7DB2D6BCCF5"
}
]
]
}
}
},
"Parameters": {
"BootstrapVersion": {
"Type": "AWS::SSM::Parameter::Value<String>",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"validateOnSynth": false,
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
"cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/95e2148d1ebc26fd910572145857d4425136c06c8c3eccf43e585af4a0e73db7.json",
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/a93b796326a3eeeb540403c10cdf6cf3b003fe7da5e559e2182f0036ff06e342.json",
"requiresBootstrapStackVersion": 6,
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
"additionalDependencies": [
Expand Down Expand Up @@ -69,6 +69,12 @@
"data": "AwsCdkKinesisEncryptedStreamsUnsupportedRegions"
}
],
"/lambda-event-source-kinesis/OutputEventSourceMappingArn": [
{
"type": "aws:cdk:logicalId",
"data": "OutputEventSourceMappingArn"
}
],
"/lambda-event-source-kinesis/BootstrapVersion": [
{
"type": "aws:cdk:logicalId",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,14 @@
"version": "0.0.0"
}
},
"OutputEventSourceMappingArn": {
"id": "OutputEventSourceMappingArn",
"path": "lambda-event-source-kinesis/OutputEventSourceMappingArn",
"constructInfo": {
"fqn": "aws-cdk-lib.CfnOutput",
"version": "0.0.0"
}
},
"BootstrapVersion": {
"id": "BootstrapVersion",
"path": "lambda-event-source-kinesis/BootstrapVersion",
Expand Down
Loading

0 comments on commit ecd7374

Please sign in to comment.