From bfac3a007c0a89891a77366f8366ce63f0767d3f Mon Sep 17 00:00:00 2001 From: watany <76135106+watany-dev@users.noreply.github.com> Date: Fri, 2 Dec 2022 16:25:00 +0000 Subject: [PATCH] fix(s3): Runtime modernization of notifications-handler --- .../notifications-resource-handler.ts | 2 +- packages/@aws-cdk/aws-s3/package.json | 1 + .../aws-cdk-s3-notifications.assets.json | 6 +- .../aws-cdk-s3-notifications.template.json | 2 +- .../cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 16 ++--- .../tree.json | 58 +++++++++++++------ .../aws-s3/test/integ.bucket.notifications.ts | 5 ++ .../@aws-cdk/aws-s3/test/notification.test.ts | 21 +++++++ 10 files changed, 83 insertions(+), 32 deletions(-) diff --git a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts index cb213d51e247e..a10048d5c5454 100644 --- a/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts +++ b/packages/@aws-cdk/aws-s3/lib/notifications-resource/notifications-resource-handler.ts @@ -98,7 +98,7 @@ export class NotificationsResourceHandler extends Construct { Code: { ZipFile: handlerSourceWithoutComments }, Handler: 'index.handler', Role: this.role.roleArn, - Runtime: 'python3.7', + Runtime: 'python3.9', Timeout: 300, }, }); diff --git a/packages/@aws-cdk/aws-s3/package.json b/packages/@aws-cdk/aws-s3/package.json index e33ac988fd8f8..815a17cbdebcb 100644 --- a/packages/@aws-cdk/aws-s3/package.json +++ b/packages/@aws-cdk/aws-s3/package.json @@ -83,6 +83,7 @@ "@aws-cdk/assertions": "0.0.0", "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/integ-runner": "0.0.0", + "@aws-cdk/integ-tests": "0.0.0", "@aws-cdk/cfn2ts": "0.0.0", "@aws-cdk/pkglint": "0.0.0", "@types/aws-lambda": "^8.10.108", diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.assets.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.assets.json index d6487fe62b263..9db394e3de998 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.assets.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.assets.json @@ -1,7 +1,7 @@ { - "version": "20.0.0", + "version": "22.0.0", "files": { - "61a3a9ee337bb9ad72389718da2aff2589bcadc056e4a5a942c4ef95ad60c38f": { + "0950e270b55171f331f16b0a63f107106782d89c7816c2ec3ba14a69c11be52d": { "source": { "path": "aws-cdk-s3-notifications.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "61a3a9ee337bb9ad72389718da2aff2589bcadc056e4a5a942c4ef95ad60c38f.json", + "objectKey": "0950e270b55171f331f16b0a63f107106782d89c7816c2ec3ba14a69c11be52d.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.template.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.template.json index 6f29d5a88f3d7..e47657af41b21 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.template.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/aws-cdk-s3-notifications.template.json @@ -89,7 +89,7 @@ "Arn" ] }, - "Runtime": "python3.7", + "Runtime": "python3.9", "Timeout": 300 }, "DependsOn": [ diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/cdk.out b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/cdk.out index 588d7b269d34f..145739f539580 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/cdk.out +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"20.0.0"} \ No newline at end of file +{"version":"22.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/integ.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/integ.json index e61cb0677c88b..5fed91212e9bc 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/integ.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "20.0.0", + "version": "22.0.0", "testCases": { "integ.bucket.notifications": { "stacks": [ diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/manifest.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/manifest.json index d70d747fb4244..eecbe0f0c5678 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/manifest.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/manifest.json @@ -1,12 +1,6 @@ { - "version": "20.0.0", + "version": "22.0.0", "artifacts": { - "Tree": { - "type": "cdk:tree", - "properties": { - "file": "tree.json" - } - }, "aws-cdk-s3-notifications.assets": { "type": "cdk:asset-manifest", "properties": { @@ -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}/61a3a9ee337bb9ad72389718da2aff2589bcadc056e4a5a942c4ef95ad60c38f.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/0950e270b55171f331f16b0a63f107106782d89c7816c2ec3ba14a69c11be52d.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -83,6 +77,12 @@ ] }, "displayName": "aws-cdk-s3-notifications" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/tree.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/tree.json index 06b4190ddc12c..8dd84ef7db22e 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/tree.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.js.snapshot/tree.json @@ -4,14 +4,6 @@ "id": "App", "path": "", "children": { - "Tree": { - "id": "Tree", - "path": "Tree", - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" - } - }, "aws-cdk-s3-notifications": { "id": "aws-cdk-s3-notifications", "path": "aws-cdk-s3-notifications", @@ -40,14 +32,14 @@ "id": "Resource", "path": "aws-cdk-s3-notifications/MyEventBridgeBucket/Notifications/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, @@ -64,6 +56,14 @@ "id": "Role", "path": "aws-cdk-s3-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role", "children": { + "ImportRole": { + "id": "ImportRole", + "path": "aws-cdk-s3-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/ImportRole", + "constructInfo": { + "fqn": "@aws-cdk/core.Resource", + "version": "0.0.0" + } + }, "Resource": { "id": "Resource", "path": "aws-cdk-s3-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/Resource", @@ -152,26 +152,50 @@ "id": "Resource", "path": "aws-cdk-s3-notifications/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource", "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.CfnResource", + "version": "0.0.0" } } }, "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "aws-cdk-s3-notifications/BootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "aws-cdk-s3-notifications/CheckBootstrapVersion", + "constructInfo": { + "fqn": "@aws-cdk/core.CfnRule", + "version": "0.0.0" } } }, + "constructInfo": { + "fqn": "@aws-cdk/core.Stack", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.1.85" + "version": "10.1.168" } } }, "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.1.85" + "fqn": "@aws-cdk/core.App", + "version": "0.0.0" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.ts b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.ts index 3180b491f6250..59092658fb929 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.ts +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.notifications.ts @@ -1,5 +1,6 @@ #!/usr/bin/env node import * as cdk from '@aws-cdk/core'; +import * as integ from '@aws-cdk/integ-tests'; import * as s3 from '../lib'; const app = new cdk.App(); @@ -11,4 +12,8 @@ new s3.Bucket(stack, 'MyEventBridgeBucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, }); +new integ.IntegTest(app, 'NotificationTest', { + testCases: [stack], +}); + app.synth(); diff --git a/packages/@aws-cdk/aws-s3/test/notification.test.ts b/packages/@aws-cdk/aws-s3/test/notification.test.ts index a32b6c8c0eab9..081d5443a2160 100644 --- a/packages/@aws-cdk/aws-s3/test/notification.test.ts +++ b/packages/@aws-cdk/aws-s3/test/notification.test.ts @@ -164,4 +164,25 @@ describe('notification', () => { }, }); }); + test('check notifications handler runtime version', () => { + const stack = new cdk.Stack(); + + const importedRole = iam.Role.fromRoleArn(stack, 'role', 'arn:aws:iam::111111111111:role/DevsNotAllowedToTouch'); + + const bucket = s3.Bucket.fromBucketAttributes(stack, 'MyBucket', { + bucketName: 'foo-bar', + notificationsHandlerRole: importedRole, + }); + + bucket.addEventNotification(s3.EventType.OBJECT_CREATED, { + bind: () => ({ + arn: 'ARN', + type: s3.BucketNotificationDestinationType.TOPIC, + }), + }); + + Template.fromStack(stack).hasResourceProperties('AWS::Lambda::Function', { + Runtime: 'python3.9', + }); + }); });