Skip to content

Commit 176feef

Browse files
feat(lambda): add nodejs18.x runtime (#22964)
Node18 runtime for Lambda Functions is available in all commercial regions except DXB, ZAZ and ZRH. ---- ### All Submissions: * [ ] Have you followed the guidelines in our [Contributing guide?](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) ### Adding new Unconventional Dependencies: * [ ] This PR adds new unconventional dependencies following the process described [here](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md/#adding-new-unconventional-dependencies) ### New Features * [ ] Have you added the new feature to an [integration test](https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md)? * [ ] 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 97e3c59 commit 176feef

File tree

7 files changed

+198
-22
lines changed

7 files changed

+198
-22
lines changed

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

Lines changed: 18 additions & 18 deletions
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_16_X,
18+
runtime: lambda.Runtime.NODEJS_18_X,
1919
handler: 'index.handler',
2020
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
2121
});
@@ -101,7 +101,7 @@ function. To reference the autogenerated Role:
101101

102102
```ts
103103
const fn = new lambda.Function(this, 'MyFunction', {
104-
runtime: lambda.Runtime.NODEJS_16_X,
104+
runtime: lambda.Runtime.NODEJS_18_X,
105105
handler: 'index.handler',
106106
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
107107
});
@@ -119,7 +119,7 @@ const myRole = new iam.Role(this, 'My Role', {
119119
});
120120

121121
const fn = new lambda.Function(this, 'MyFunction', {
122-
runtime: lambda.Runtime.NODEJS_16_X,
122+
runtime: lambda.Runtime.NODEJS_18_X,
123123
handler: 'index.handler',
124124
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
125125
role: myRole, // user-provided role
@@ -141,7 +141,7 @@ import * as cdk from '@aws-cdk/core';
141141
import * as cloudwatch from '@aws-cdk/aws-cloudwatch';
142142

143143
const fn = new lambda.Function(this, 'MyFunction', {
144-
runtime: lambda.Runtime.NODEJS_16_X,
144+
runtime: lambda.Runtime.NODEJS_18_X,
145145
handler: 'index.handler',
146146
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
147147
timeout: cdk.Duration.minutes(5),
@@ -295,7 +295,7 @@ latest code. For instance -
295295
```ts
296296
const codeVersion = "stringOrMethodToGetCodeVersion";
297297
const fn = new lambda.Function(this, 'MyFunction', {
298-
runtime: lambda.Runtime.NODEJS_16_X,
298+
runtime: lambda.Runtime.NODEJS_18_X,
299299
handler: 'index.handler',
300300
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
301301
environment: {
@@ -418,7 +418,7 @@ const fn = new lambda.Function(this, 'MyFunction', {
418418
removalPolicy: RemovalPolicy.RETAIN, // retain old versions
419419
retryAttempts: 1, // async retry attempts
420420
},
421-
runtime: lambda.Runtime.NODEJS_16_X,
421+
runtime: lambda.Runtime.NODEJS_18_X,
422422
handler: 'index.handler',
423423
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
424424
});
@@ -522,7 +522,7 @@ A lambda function can be configured to be run on one of these platforms:
522522

523523
```ts
524524
new lambda.Function(this, 'MyFunction', {
525-
runtime: lambda.Runtime.NODEJS_16_X,
525+
runtime: lambda.Runtime.NODEJS_18_X,
526526
handler: 'index.handler',
527527
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
528528
architecture: lambda.Architecture.ARM_64,
@@ -546,7 +546,7 @@ which provides low-level runtime metrics for a Lambda functions.
546546

547547
```ts
548548
new lambda.Function(this, 'MyFunction', {
549-
runtime: lambda.Runtime.NODEJS_16_X,
549+
runtime: lambda.Runtime.NODEJS_18_X,
550550
handler: 'index.handler',
551551
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
552552
insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_98_0,
@@ -558,7 +558,7 @@ If the version of insights is not yet available in the CDK, you can also provide
558558
```ts
559559
const layerArn = 'arn:aws:lambda:us-east-1:580247275435:layer:LambdaInsightsExtension:14';
560560
new lambda.Function(this, 'MyFunction', {
561-
runtime: lambda.Runtime.NODEJS_16_X,
561+
runtime: lambda.Runtime.NODEJS_18_X,
562562
handler: 'index.handler',
563563
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
564564
insightsVersion: lambda.LambdaInsightsVersion.fromInsightVersionArn(layerArn),
@@ -570,7 +570,7 @@ Lambda Insights Version >= `1_0_119_0`.
570570

571571
```ts
572572
new lambda.Function(this, 'MyFunction', {
573-
runtime: lambda.Runtime.NODEJS_16_X,
573+
runtime: lambda.Runtime.NODEJS_18_X,
574574
handler: 'index.handler',
575575
architecture: lambda.Architecture.ARM_64,
576576
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
@@ -699,7 +699,7 @@ a `sqs.Queue` as `deadLetterQueue`.
699699

700700
```ts
701701
const fn = new lambda.Function(this, 'MyFunction', {
702-
runtime: lambda.Runtime.NODEJS_16_X,
702+
runtime: lambda.Runtime.NODEJS_18_X,
703703
handler: 'index.handler',
704704
code: lambda.Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
705705
deadLetterQueueEnabled: true,
@@ -713,7 +713,7 @@ import * as sqs from '@aws-cdk/aws-sqs';
713713

714714
const dlq = new sqs.Queue(this, 'DLQ');
715715
const fn = new lambda.Function(this, 'MyFunction', {
716-
runtime: lambda.Runtime.NODEJS_16_X,
716+
runtime: lambda.Runtime.NODEJS_18_X,
717717
handler: 'index.handler',
718718
code: lambda.Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
719719
deadLetterQueue: dlq,
@@ -727,7 +727,7 @@ import * as sns from '@aws-cdk/aws-sns';
727727

728728
const dlt = new sns.Topic(this, 'DLQ');
729729
const fn = new lambda.Function(this, 'MyFunction', {
730-
runtime: lambda.Runtime.NODEJS_16_X,
730+
runtime: lambda.Runtime.NODEJS_18_X,
731731
handler: 'index.handler',
732732
code: lambda.Code.fromInline('// your code here'),
733733
deadLetterTopic: dlt,
@@ -741,7 +741,7 @@ to learn more about AWS Lambdas and DLQs.
741741

742742
```ts
743743
const fn = new lambda.Function(this, 'MyFunction', {
744-
runtime: lambda.Runtime.NODEJS_16_X,
744+
runtime: lambda.Runtime.NODEJS_18_X,
745745
handler: 'index.handler',
746746
code: lambda.Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
747747
tracing: lambda.Tracing.ACTIVE,
@@ -776,7 +776,7 @@ to learn more about AWS Lambda's Profiling support.
776776

777777
```ts
778778
const fn = new lambda.Function(this, 'MyFunction', {
779-
runtime: lambda.Runtime.NODEJS_16_X,
779+
runtime: lambda.Runtime.NODEJS_18_X,
780780
handler: 'index.handler',
781781
code: lambda.Code.fromInline('exports.handler = function(event, ctx, cb) { return cb(null, "hi"); }'),
782782
reservedConcurrentExecutions: 100,
@@ -874,7 +874,7 @@ const accessPoint = fileSystem.addAccessPoint('AccessPoint', {
874874
const fn = new lambda.Function(this, 'MyLambda', {
875875
// mount the access point to /mnt/msg in the lambda runtime environment
876876
filesystem: lambda.FileSystem.fromEfsAccessPoint(accessPoint, '/mnt/msg'),
877-
runtime: lambda.Runtime.NODEJS_16_X,
877+
runtime: lambda.Runtime.NODEJS_18_X,
878878
handler: 'index.handler',
879879
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
880880
vpc,
@@ -891,7 +891,7 @@ The ephemeral storage will be accessible in the functions' `/tmp` directory.
891891
import { Size } from '@aws-cdk/core';
892892

893893
const fn = new lambda.Function(this, 'MyFunction', {
894-
runtime: lambda.Runtime.NODEJS_16_X,
894+
runtime: lambda.Runtime.NODEJS_18_X,
895895
handler: 'index.handler',
896896
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
897897
ephemeralStorageSize: Size.mebibytes(1024),
@@ -988,7 +988,7 @@ const codeSigningConfig = new lambda.CodeSigningConfig(this, 'CodeSigningConfig'
988988

989989
new lambda.Function(this, 'Function', {
990990
codeSigningConfig,
991-
runtime: lambda.Runtime.NODEJS_16_X,
991+
runtime: lambda.Runtime.NODEJS_18_X,
992992
handler: 'index.handler',
993993
code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
994994
});

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ export class Runtime {
8686
*/
8787
public static readonly NODEJS_16_X = new Runtime('nodejs16.x', RuntimeFamily.NODEJS, { supportsInlineCode: true });
8888

89+
/**
90+
* The NodeJS 18.x runtime (nodejs18.x) supported in all commercial regions except me-central-1, eu-central-2 and eu-south-2.
91+
*/
92+
public static readonly NODEJS_18_X = new Runtime('nodejs18.x', RuntimeFamily.NODEJS, { supportsInlineCode: true });
93+
8994
/**
9095
* The Python 2.7 runtime (python2.7)
9196
* @deprecated Legacy runtime no longer supported by AWS Lambda. Migrate to the latest Python runtime.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
22
"version": "21.0.0",
33
"files": {
4-
"33c56e02291eaea4afa147afc5d42ce6d80c4f482906b78fa47ddbe2582f19bc": {
4+
"cf7620e382e2aa15559aba9e2cdca5e3f155cb9f1faca27986aeed5f01ffca07": {
55
"source": {
66
"path": "aws-cdk-lambda-runtime-inlinecode.template.json",
77
"packaging": "file"
88
},
99
"destinations": {
1010
"current_account-current_region": {
1111
"bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}",
12-
"objectKey": "33c56e02291eaea4afa147afc5d42ce6d80c4f482906b78fa47ddbe2582f19bc.json",
12+
"objectKey": "cf7620e382e2aa15559aba9e2cdca5e3f155cb9f1faca27986aeed5f01ffca07.json",
1313
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}"
1414
}
1515
}

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,56 @@
249249
"DependsOn": [
250250
"NODEJS16XServiceRoleB9DAFDFD"
251251
]
252+
},
253+
"NODEJS18XServiceRole4D18036A": {
254+
"Type": "AWS::IAM::Role",
255+
"Properties": {
256+
"AssumeRolePolicyDocument": {
257+
"Statement": [
258+
{
259+
"Action": "sts:AssumeRole",
260+
"Effect": "Allow",
261+
"Principal": {
262+
"Service": "lambda.amazonaws.com"
263+
}
264+
}
265+
],
266+
"Version": "2012-10-17"
267+
},
268+
"ManagedPolicyArns": [
269+
{
270+
"Fn::Join": [
271+
"",
272+
[
273+
"arn:",
274+
{
275+
"Ref": "AWS::Partition"
276+
},
277+
":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
278+
]
279+
]
280+
}
281+
]
282+
}
283+
},
284+
"NODEJS18X7B6E6033": {
285+
"Type": "AWS::Lambda::Function",
286+
"Properties": {
287+
"Code": {
288+
"ZipFile": "exports.handler = async function(event) { return \"success\" }"
289+
},
290+
"Role": {
291+
"Fn::GetAtt": [
292+
"NODEJS18XServiceRole4D18036A",
293+
"Arn"
294+
]
295+
},
296+
"Handler": "index.handler",
297+
"Runtime": "nodejs18.x"
298+
},
299+
"DependsOn": [
300+
"NODEJS18XServiceRole4D18036A"
301+
]
252302
}
253303
},
254304
"Outputs": {
@@ -276,6 +326,11 @@
276326
"Value": {
277327
"Ref": "NODEJS16XDE5DD82D"
278328
}
329+
},
330+
"NODEJS18XfunctionName": {
331+
"Value": {
332+
"Ref": "NODEJS18X7B6E6033"
333+
}
279334
}
280335
},
281336
"Parameters": {

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"validateOnSynth": false,
2424
"assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
2525
"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}/33c56e02291eaea4afa147afc5d42ce6d80c4f482906b78fa47ddbe2582f19bc.json",
26+
"stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/cf7620e382e2aa15559aba9e2cdca5e3f155cb9f1faca27986aeed5f01ffca07.json",
2727
"requiresBootstrapStackVersion": 6,
2828
"bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
2929
"additionalDependencies": [
@@ -129,6 +129,24 @@
129129
"data": "NODEJS16XfunctionName"
130130
}
131131
],
132+
"/aws-cdk-lambda-runtime-inlinecode/NODEJS_18_X/ServiceRole/Resource": [
133+
{
134+
"type": "aws:cdk:logicalId",
135+
"data": "NODEJS18XServiceRole4D18036A"
136+
}
137+
],
138+
"/aws-cdk-lambda-runtime-inlinecode/NODEJS_18_X/Resource": [
139+
{
140+
"type": "aws:cdk:logicalId",
141+
"data": "NODEJS18X7B6E6033"
142+
}
143+
],
144+
"/aws-cdk-lambda-runtime-inlinecode/NODEJS_18_X-functionName": [
145+
{
146+
"type": "aws:cdk:logicalId",
147+
"data": "NODEJS18XfunctionName"
148+
}
149+
],
132150
"/aws-cdk-lambda-runtime-inlinecode/BootstrapVersion": [
133151
{
134152
"type": "aws:cdk:logicalId",

0 commit comments

Comments
 (0)