diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/aws-cdk-lambda-runtime-inlinecode.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/aws-cdk-lambda-runtime-inlinecode.assets.json index 60c1bee94d14d..451cfcd3f0f27 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/aws-cdk-lambda-runtime-inlinecode.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/aws-cdk-lambda-runtime-inlinecode.assets.json @@ -1,7 +1,7 @@ { "version": "34.0.0", "files": { - "4ead45111870c9c1adb03a0aba3c5d2de7b2102d0e62479767984e93f983ebe3": { + "ab212011785d32ea6de009fda91d48cf0cd3411ffebcdd7a6b62ccd841c00906": { "source": { "path": "aws-cdk-lambda-runtime-inlinecode.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "4ead45111870c9c1adb03a0aba3c5d2de7b2102d0e62479767984e93f983ebe3.json", + "objectKey": "ab212011785d32ea6de009fda91d48cf0cd3411ffebcdd7a6b62ccd841c00906.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/aws-cdk-lambda-runtime-inlinecode.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/aws-cdk-lambda-runtime-inlinecode.template.json index f091c7573b0e8..974dac560fff4 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/aws-cdk-lambda-runtime-inlinecode.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/aws-cdk-lambda-runtime-inlinecode.template.json @@ -399,6 +399,56 @@ "DependsOn": [ "NODEJS18XServiceRole4D18036A" ] + }, + "NODEJS20XServiceRole188A4E38": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "NODEJS20X70A25ADE": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "exports.handler = async function(event) { return \"success\" }" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "NODEJS20XServiceRole188A4E38", + "Arn" + ] + }, + "Runtime": "nodejs20.x" + }, + "DependsOn": [ + "NODEJS20XServiceRole188A4E38" + ] } }, "Outputs": { @@ -441,6 +491,11 @@ "Value": { "Ref": "NODEJS18X7B6E6033" } + }, + "NODEJS20XfunctionName": { + "Value": { + "Ref": "NODEJS20X70A25ADE" + } } }, "Parameters": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/manifest.json index 33639d383ff36..8de8c51ed33f1 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/manifest.json @@ -18,7 +18,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}/4ead45111870c9c1adb03a0aba3c5d2de7b2102d0e62479767984e93f983ebe3.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/ab212011785d32ea6de009fda91d48cf0cd3411ffebcdd7a6b62ccd841c00906.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -106,24 +106,6 @@ "data": "PYTHON310functionName" } ], - "/aws-cdk-lambda-runtime-inlinecode/PYTHON_3_12/ServiceRole/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "PYTHON312ServiceRoleBEB03378" - } - ], - "/aws-cdk-lambda-runtime-inlinecode/PYTHON_3_12/Resource": [ - { - "type": "aws:cdk:logicalId", - "data": "PYTHON3127B62731D" - } - ], - "/aws-cdk-lambda-runtime-inlinecode/PYTHON_3_12-functionName": [ - { - "type": "aws:cdk:logicalId", - "data": "PYTHON312functionName" - } - ], "/aws-cdk-lambda-runtime-inlinecode/NODEJS_14_X/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", @@ -178,6 +160,24 @@ "data": "NODEJS18XfunctionName" } ], + "/aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "NODEJS20XServiceRole188A4E38" + } + ], + "/aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "NODEJS20X70A25ADE" + } + ], + "/aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X-functionName": [ + { + "type": "aws:cdk:logicalId", + "data": "NODEJS20XfunctionName" + } + ], "/aws-cdk-lambda-runtime-inlinecode/BootstrapVersion": [ { "type": "aws:cdk:logicalId", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/tree.json index eea90c052289d..db7c32bbc11a6 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.js.snapshot/tree.json @@ -800,6 +800,105 @@ "version": "0.0.0" } }, + "NODEJS_20_X": { + "id": "NODEJS_20_X", + "path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "managedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0" + } + }, + "Resource": { + "id": "Resource", + "path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Function", + "aws:cdk:cloudformation:props": { + "code": { + "zipFile": "exports.handler = async function(event) { return \"success\" }" + }, + "handler": "index.handler", + "role": { + "Fn::GetAtt": [ + "NODEJS20XServiceRole188A4E38", + "Arn" + ] + }, + "runtime": "nodejs20.x" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.Function", + "version": "0.0.0" + } + }, + "NODEJS_20_X-functionName": { + "id": "NODEJS_20_X-functionName", + "path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_20_X-functionName", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnOutput", + "version": "0.0.0" + } + }, "BootstrapVersion": { "id": "BootstrapVersion", "path": "aws-cdk-lambda-runtime-inlinecode/BootstrapVersion", diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.ts index ac663c18f9e7b..3411babefaaeb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-lambda/test/integ.runtime.inlinecode.ts @@ -71,4 +71,11 @@ const node18xfn = new Function(stack, 'NODEJS_18_X', { }); new CfnOutput(stack, 'NODEJS_18_X-functionName', { value: node18xfn.functionName }); +const node20xfn = new Function(stack, 'NODEJS_20_X', { + code: new InlineCode('exports.handler = async function(event) { return "success" }'), + handler: 'index.handler', + runtime: Runtime.NODEJS_20_X, +}); +new CfnOutput(stack, 'NODEJS_20_X-functionName', { value: node20xfn.functionName }); + app.synth(); diff --git a/packages/aws-cdk-lib/aws-lambda/lib/runtime.ts b/packages/aws-cdk-lib/aws-lambda/lib/runtime.ts index 1727a7e565c63..734f895031d77 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/runtime.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/runtime.ts @@ -104,6 +104,11 @@ export class Runtime { */ public static readonly NODEJS_18_X = new Runtime('nodejs18.x', RuntimeFamily.NODEJS, { supportsInlineCode: true }); + /** + * The NodeJS 20.x runtime (nodejs20.x) + */ + public static readonly NODEJS_20_X = new Runtime('nodejs20.x', RuntimeFamily.NODEJS, { supportsInlineCode: true }); + /** * The latest NodeJS version currently available */