Skip to content

Commit edf7c86

Browse files
authored
feat(lambda): nodejs16.x runtime (#20261)
Add Node16 to the supported runtimes for Lambda Functions. ---- ### All Submissions: * [x] Have you followed the guidelines in our [Contributing guide?](https://github.com/aws/aws-cdk/blob/master/CONTRIBUTING.md) ### Adding new Unconventional Dependencies: * [ ] This PR adds new unconventional dependencies following the process described [here](https://github.com/aws/aws-cdk/blob/master/CONTRIBUTING.md/#adding-new-unconventional-dependencies) ### New Features * [x] Have you added the new feature to an [integration test](https://github.com/aws/aws-cdk/blob/master/INTEGRATION_TESTS.md)? * [x] Did you use `yarn integ` to deploy the infrastructure and generate the snapshot (i.e. `yarn integ` without `--dry-run`)? *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent cd7b673 commit edf7c86

File tree

6 files changed

+195
-19
lines changed

6 files changed

+195
-19
lines changed

packages/@aws-cdk/aws-lambda/README.md

+18-18
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ This construct library allows you to define AWS Lambda Functions.
1515

1616
```ts
1717
const fn = new lambda.Function(this, 'MyFunction', {
18-
runtime: lambda.Runtime.NODEJS_12_X,
18+
runtime: lambda.Runtime.NODEJS_16_X,
1919
handler: 'index.handler',
2020
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
2121
});
@@ -91,7 +91,7 @@ function. To reference the autogenerated Role:
9191

9292
```ts
9393
const fn = new lambda.Function(this, 'MyFunction', {
94-
runtime: lambda.Runtime.NODEJS_12_X,
94+
runtime: lambda.Runtime.NODEJS_16_X,
9595
handler: 'index.handler',
9696
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
9797
});
@@ -109,7 +109,7 @@ const myRole = new iam.Role(this, 'My Role', {
109109
});
110110

111111
const fn = new lambda.Function(this, 'MyFunction', {
112-
runtime: lambda.Runtime.NODEJS_12_X,
112+
runtime: lambda.Runtime.NODEJS_16_X,
113113
handler: 'index.handler',
114114
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
115115
role: myRole, // user-provided role
@@ -131,7 +131,7 @@ import * as cdk from '@aws-cdk/core';
131131
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';
132132

133133
const fn = new lambda.Function(this, 'MyFunction', {
134-
runtime: lambda.Runtime.NODEJS_12_X,
134+
runtime: lambda.Runtime.NODEJS_16_X,
135135
handler: 'index.handler',
136136
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
137137
timeout: cdk.Duration.minutes(5),
@@ -243,7 +243,7 @@ latest code. For instance -
243243
```ts
244244
const codeVersion = "stringOrMethodToGetCodeVersion";
245245
const fn = new lambda.Function(this, 'MyFunction', {
246-
runtime: lambda.Runtime.NODEJS_12_X,
246+
runtime: lambda.Runtime.NODEJS_16_X,
247247
handler: 'index.handler',
248248
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
249249
environment: {
@@ -331,7 +331,7 @@ const fn = new lambda.Function(this, 'MyFunction', {
331331
removalPolicy: RemovalPolicy.RETAIN, // retain old versions
332332
retryAttempts: 1, // async retry attempts
333333
},
334-
runtime: lambda.Runtime.NODEJS_12_X,
334+
runtime: lambda.Runtime.NODEJS_16_X,
335335
handler: 'index.handler',
336336
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
337337
});
@@ -435,7 +435,7 @@ A lambda function can be configured to be run on one of these platforms:
435435

436436
```ts
437437
new lambda.Function(this, 'MyFunction', {
438-
runtime: lambda.Runtime.NODEJS_12_X,
438+
runtime: lambda.Runtime.NODEJS_16_X,
439439
handler: 'index.handler',
440440
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
441441
architecture: lambda.Architecture.ARM_64,
@@ -459,7 +459,7 @@ which provides low-level runtime metrics for a Lambda functions.
459459

460460
```ts
461461
new lambda.Function(this, 'MyFunction', {
462-
runtime: lambda.Runtime.NODEJS_12_X,
462+
runtime: lambda.Runtime.NODEJS_16_X,
463463
handler: 'index.handler',
464464
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
465465
insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_98_0,
@@ -471,7 +471,7 @@ If the version of insights is not yet available in the CDK, you can also provide
471471
```ts
472472
const layerArn = 'arn:aws:lambda:us-east-1:580247275435:layer:LambdaInsightsExtension:14';
473473
new lambda.Function(this, 'MyFunction', {
474-
runtime: lambda.Runtime.NODEJS_12_X,
474+
runtime: lambda.Runtime.NODEJS_16_X,
475475
handler: 'index.handler',
476476
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
477477
insightsVersion: lambda.LambdaInsightsVersion.fromInsightVersionArn(layerArn),
@@ -483,7 +483,7 @@ Lambda Insights Version >= `1_0_119_0`.
483483

484484
```ts
485485
new lambda.Function(this, 'MyFunction', {
486-
runtime: lambda.Runtime.NODEJS_12_X,
486+
runtime: lambda.Runtime.NODEJS_16_X,
487487
handler: 'index.handler',
488488
architecture: lambda.Architecture.ARM_64,
489489
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
@@ -592,7 +592,7 @@ a `sqs.Queue` as `deadLetterQueue`.
592592

593593
```ts
594594
const fn = new lambda.Function(this, 'MyFunction', {
595-
runtime: lambda.Runtime.NODEJS_12_X,
595+
runtime: lambda.Runtime.NODEJS_16_X,
596596
handler: 'index.handler',
597597
code: lambda.Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
598598
deadLetterQueueEnabled: true,
@@ -606,7 +606,7 @@ import * as sqs from '@aws-cdk/aws-sqs';
606606

607607
const dlq = new sqs.Queue(this, 'DLQ');
608608
const fn = new lambda.Function(this, 'MyFunction', {
609-
runtime: lambda.Runtime.NODEJS_12_X,
609+
runtime: lambda.Runtime.NODEJS_16_X,
610610
handler: 'index.handler',
611611
code: lambda.Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
612612
deadLetterQueue: dlq,
@@ -620,7 +620,7 @@ import * as sns from '@aws-cdk/aws-sns';
620620

621621
const dlt = new sns.Topic(this, 'DLQ');
622622
const fn = new lambda.Function(this, 'MyFunction', {
623-
runtime: lambda.Runtime.NODEJS_12_X,
623+
runtime: lambda.Runtime.NODEJS_16_X,
624624
handler: 'index.handler',
625625
code: lambda.Code.fromInline('// your code here'),
626626
deadLetterTopic: dlt,
@@ -634,7 +634,7 @@ to learn more about AWS Lambdas and DLQs.
634634

635635
```ts
636636
const fn = new lambda.Function(this, 'MyFunction', {
637-
runtime: lambda.Runtime.NODEJS_12_X,
637+
runtime: lambda.Runtime.NODEJS_16_X,
638638
handler: 'index.handler',
639639
code: lambda.Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
640640
tracing: lambda.Tracing.ACTIVE,
@@ -669,7 +669,7 @@ to learn more about AWS Lambda's Profiling support.
669669

670670
```ts
671671
const fn = new lambda.Function(this, 'MyFunction', {
672-
runtime: lambda.Runtime.NODEJS_12_X,
672+
runtime: lambda.Runtime.NODEJS_16_X,
673673
handler: 'index.handler',
674674
code: lambda.Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
675675
reservedConcurrentExecutions: 100,
@@ -767,7 +767,7 @@ const accessPoint = fileSystem.addAccessPoint('AccessPoint', {
767767
const fn = new lambda.Function(this, 'MyLambda', {
768768
// mount the access point to /mnt/msg in the lambda runtime environment
769769
filesystem: lambda.FileSystem.fromEfsAccessPoint(accessPoint, '/mnt/msg'),
770-
runtime: lambda.Runtime.NODEJS_12_X,
770+
runtime: lambda.Runtime.NODEJS_16_X,
771771
handler: 'index.handler',
772772
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
773773
vpc,
@@ -784,7 +784,7 @@ The ephemeral storage will be accessible in the functions' `/tmp` directory.
784784
import { Size } from '@aws-cdk/core';
785785

786786
const fn = new lambda.Function(this, 'MyFunction', {
787-
runtime: lambda.Runtime.NODEJS_14_X,
787+
runtime: lambda.Runtime.NODEJS_16_X,
788788
handler: 'index.handler',
789789
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
790790
ephemeralStorageSize: Size.mebibytes(1024),
@@ -881,7 +881,7 @@ const codeSigningConfig = new lambda.CodeSigningConfig(this, 'CodeSigningConfig'
881881

882882
new lambda.Function(this, 'Function', {
883883
codeSigningConfig,
884-
runtime: lambda.Runtime.NODEJS_12_X,
884+
runtime: lambda.Runtime.NODEJS_16_X,
885885
handler: 'index.handler',
886886
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
887887
});

packages/@aws-cdk/aws-lambda/lib/runtime.ts

+5
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ export class Runtime {
8080
*/
8181
public static readonly NODEJS_14_X = new Runtime('nodejs14.x', RuntimeFamily.NODEJS, { supportsInlineCode: true });
8282

83+
/**
84+
* The NodeJS 16.x runtime (nodejs16.x)
85+
*/
86+
public static readonly NODEJS_16_X = new Runtime('nodejs14.x', RuntimeFamily.NODEJS, { supportsInlineCode: true });
87+
8388
/**
8489
* The Python 2.7 runtime (python2.7)
8590
* @deprecated Legacy runtime no longer supported by AWS Lambda. Migrate to the latest Python runtime.

packages/@aws-cdk/aws-lambda/test/integ.runtime.inlinecode.ts

+7
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,11 @@ const node14xfn = new Function(stack, 'NODEJS_14_X', {
5757
});
5858
new CfnOutput(stack, 'NODEJS_14_X-functionName', { value: node14xfn.functionName });
5959

60+
const node16xfn = new Function(stack, 'NODEJS_16_X', {
61+
code: new InlineCode('exports.handler = async function(event) { return "success" }'),
62+
handler: 'index.handler',
63+
runtime: Runtime.NODEJS_16_X,
64+
});
65+
new CfnOutput(stack, 'NODEJS_16_X-functionName', { value: node16xfn.functionName });
66+
6067
app.synth();

packages/@aws-cdk/aws-lambda/test/runtime.inlinecode.integ.snapshot/aws-cdk-lambda-runtime-inlinecode.template.json

+55
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,56 @@
299299
"DependsOn": [
300300
"NODEJS14XServiceRole4523ECDB"
301301
]
302+
},
303+
"NODEJS16XServiceRoleB9DAFDFD": {
304+
"Type": "AWS::IAM::Role",
305+
"Properties": {
306+
"AssumeRolePolicyDocument": {
307+
"Statement": [
308+
{
309+
"Action": "sts:AssumeRole",
310+
"Effect": "Allow",
311+
"Principal": {
312+
"Service": "lambda.amazonaws.com"
313+
}
314+
}
315+
],
316+
"Version": "2012-10-17"
317+
},
318+
"ManagedPolicyArns": [
319+
{
320+
"Fn::Join": [
321+
"",
322+
[
323+
"arn:",
324+
{
325+
"Ref": "AWS::Partition"
326+
},
327+
":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
328+
]
329+
]
330+
}
331+
]
332+
}
333+
},
334+
"NODEJS16XDE5DD82D": {
335+
"Type": "AWS::Lambda::Function",
336+
"Properties": {
337+
"Code": {
338+
"ZipFile": "exports.handler = async function(event) { return \"success\" }"
339+
},
340+
"Role": {
341+
"Fn::GetAtt": [
342+
"NODEJS16XServiceRoleB9DAFDFD",
343+
"Arn"
344+
]
345+
},
346+
"Handler": "index.handler",
347+
"Runtime": "nodejs14.x"
348+
},
349+
"DependsOn": [
350+
"NODEJS16XServiceRoleB9DAFDFD"
351+
]
302352
}
303353
},
304354
"Outputs": {
@@ -331,6 +381,11 @@
331381
"Value": {
332382
"Ref": "NODEJS14X930214A3"
333383
}
384+
},
385+
"NODEJS16XfunctionName": {
386+
"Value": {
387+
"Ref": "NODEJS16XDE5DD82D"
388+
}
334389
}
335390
}
336391
}

packages/@aws-cdk/aws-lambda/test/runtime.inlinecode.integ.snapshot/manifest.json

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "17.0.0",
2+
"version": "18.0.0",
33
"artifacts": {
44
"Tree": {
55
"type": "cdk:tree",
@@ -122,6 +122,24 @@
122122
"type": "aws:cdk:logicalId",
123123
"data": "NODEJS14XfunctionName"
124124
}
125+
],
126+
"/aws-cdk-lambda-runtime-inlinecode/NODEJS_16_X/ServiceRole/Resource": [
127+
{
128+
"type": "aws:cdk:logicalId",
129+
"data": "NODEJS16XServiceRoleB9DAFDFD"
130+
}
131+
],
132+
"/aws-cdk-lambda-runtime-inlinecode/NODEJS_16_X/Resource": [
133+
{
134+
"type": "aws:cdk:logicalId",
135+
"data": "NODEJS16XDE5DD82D"
136+
}
137+
],
138+
"/aws-cdk-lambda-runtime-inlinecode/NODEJS_16_X-functionName": [
139+
{
140+
"type": "aws:cdk:logicalId",
141+
"data": "NODEJS16XfunctionName"
142+
}
125143
]
126144
},
127145
"displayName": "aws-cdk-lambda-runtime-inlinecode"

packages/@aws-cdk/aws-lambda/test/runtime.inlinecode.integ.snapshot/tree.json

+91
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,97 @@
561561
"fqn": "@aws-cdk/core.CfnOutput",
562562
"version": "0.0.0"
563563
}
564+
},
565+
"NODEJS_16_X": {
566+
"id": "NODEJS_16_X",
567+
"path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_16_X",
568+
"children": {
569+
"ServiceRole": {
570+
"id": "ServiceRole",
571+
"path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_16_X/ServiceRole",
572+
"children": {
573+
"Resource": {
574+
"id": "Resource",
575+
"path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_16_X/ServiceRole/Resource",
576+
"attributes": {
577+
"aws:cdk:cloudformation:type": "AWS::IAM::Role",
578+
"aws:cdk:cloudformation:props": {
579+
"assumeRolePolicyDocument": {
580+
"Statement": [
581+
{
582+
"Action": "sts:AssumeRole",
583+
"Effect": "Allow",
584+
"Principal": {
585+
"Service": "lambda.amazonaws.com"
586+
}
587+
}
588+
],
589+
"Version": "2012-10-17"
590+
},
591+
"managedPolicyArns": [
592+
{
593+
"Fn::Join": [
594+
"",
595+
[
596+
"arn:",
597+
{
598+
"Ref": "AWS::Partition"
599+
},
600+
":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
601+
]
602+
]
603+
}
604+
]
605+
}
606+
},
607+
"constructInfo": {
608+
"fqn": "@aws-cdk/aws-iam.CfnRole",
609+
"version": "0.0.0"
610+
}
611+
}
612+
},
613+
"constructInfo": {
614+
"fqn": "@aws-cdk/aws-iam.Role",
615+
"version": "0.0.0"
616+
}
617+
},
618+
"Resource": {
619+
"id": "Resource",
620+
"path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_16_X/Resource",
621+
"attributes": {
622+
"aws:cdk:cloudformation:type": "AWS::Lambda::Function",
623+
"aws:cdk:cloudformation:props": {
624+
"code": {
625+
"zipFile": "exports.handler = async function(event) { return \"success\" }"
626+
},
627+
"role": {
628+
"Fn::GetAtt": [
629+
"NODEJS16XServiceRoleB9DAFDFD",
630+
"Arn"
631+
]
632+
},
633+
"handler": "index.handler",
634+
"runtime": "nodejs14.x"
635+
}
636+
},
637+
"constructInfo": {
638+
"fqn": "@aws-cdk/aws-lambda.CfnFunction",
639+
"version": "0.0.0"
640+
}
641+
}
642+
},
643+
"constructInfo": {
644+
"fqn": "@aws-cdk/aws-lambda.Function",
645+
"version": "0.0.0"
646+
}
647+
},
648+
"NODEJS_16_X-functionName": {
649+
"id": "NODEJS_16_X-functionName",
650+
"path": "aws-cdk-lambda-runtime-inlinecode/NODEJS_16_X-functionName",
651+
"constructInfo": {
652+
"fqn": "@aws-cdk/core.CfnOutput",
653+
"version": "0.0.0"
654+
}
564655
}
565656
},
566657
"constructInfo": {

0 commit comments

Comments
 (0)