Skip to content

Commit 0bf7771

Browse files
authored
Merge #4360 support java17 Lambda runtime
2 parents edff9d8 + 9863024 commit 0bf7771

File tree

36 files changed

+880
-499
lines changed

36 files changed

+880
-499
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "Feature",
3+
"description": "Enable java 17 for SAM create and local Lambda debugging"
4+
}

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4269,7 +4269,7 @@
42694269
},
42704270
"devDependencies": {
42714271
"@aws-sdk/types": "^3.13.1",
4272-
"@aws-toolkits/telemetry": "^1.0.182",
4272+
"@aws-toolkits/telemetry": "^1.0.184",
42734273
"@aws/fully-qualified-names": "^2.1.1",
42744274
"@cspotcode/source-map-support": "^0.8.1",
42754275
"@sinonjs/fake-timers": "^10.0.2",

src/lambda/models/samLambdaRuntime.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export const pythonRuntimes: ImmutableSet<Runtime> = ImmutableSet<Runtime>([
5252
'python3.7',
5353
])
5454
export const goRuntimes: ImmutableSet<Runtime> = ImmutableSet<Runtime>(['go1.x'])
55-
export const javaRuntimes: ImmutableSet<Runtime> = ImmutableSet<Runtime>(['java11', 'java8', 'java8.al2'])
55+
export const javaRuntimes: ImmutableSet<Runtime> = ImmutableSet<Runtime>(['java17', 'java11', 'java8', 'java8.al2'])
5656
export const dotNetRuntimes: ImmutableSet<Runtime> = ImmutableSet<Runtime>(['dotnet6'])
5757

5858
/**
@@ -73,11 +73,11 @@ export const deprecatedRuntimes: ImmutableSet<Runtime> = ImmutableSet<Runtime>([
7373
'nodejs10.x',
7474
])
7575
const defaultRuntimes = ImmutableMap<RuntimeFamily, Runtime>([
76-
[RuntimeFamily.NodeJS, 'nodejs14.x'],
77-
[RuntimeFamily.Python, 'python3.9'],
76+
[RuntimeFamily.NodeJS, 'nodejs18.x'],
77+
[RuntimeFamily.Python, 'python3.12'],
7878
[RuntimeFamily.DotNet, 'dotnet6'],
7979
[RuntimeFamily.Go, 'go1.x'],
80-
[RuntimeFamily.Java, 'java11'],
80+
[RuntimeFamily.Java, 'java17'],
8181
])
8282

8383
export const samZipLambdaRuntimes: ImmutableSet<Runtime> = ImmutableSet.union([
@@ -94,6 +94,7 @@ export const samArmLambdaRuntimes: ImmutableSet<Runtime> = ImmutableSet<Runtime>
9494
'nodejs18.x',
9595
'nodejs16.x',
9696
'nodejs14.x',
97+
'java17',
9798
'java11',
9899
'java8.al2',
99100
])

src/shared/sam/debugger/javaSamDebug.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,7 @@ export async function makeJavaConfig(config: SamLaunchRequestArgs): Promise<SamL
3131
config.port = config.debugPort
3232
if (await isImageLambdaConfig(config)) {
3333
config.containerEnvVars = {
34-
_JAVA_OPTIONS:
35-
// https://github.com/aws/aws-sam-cli/blob/86f88cbd7df365960f7015c5d086b0db7aedd9d5/samcli/local/docker/lambda_debug_settings.py#L53
36-
config.runtime === 'java11'
37-
? `-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=*:${config.debugPort} -XX:MaxHeapSize=2834432k -XX:MaxMetaspaceSize=163840k -XX:ReservedCodeCacheSize=81920k -XX:+UseSerialGC -XX:-TieredCompilation -Djava.net.preferIPv4Stack=true`
38-
: `-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=${config.debugPort} -XX:MaxHeapSize=2834432k -XX:MaxMetaspaceSize=163840k -XX:ReservedCodeCacheSize=81920k -XX:+UseSerialGC -XX:-TieredCompilation -Djava.net.preferIPv4Stack=true -Xshare:off`,
34+
_JAVA_OPTIONS: getJavaOptionsEnvVar(config),
3935
}
4036
}
4137
}
@@ -52,3 +48,16 @@ export async function invokeJavaLambda(ctx: ExtContext, config: SamLaunchRequest
5248
}
5349
return await runLambdaFunction(ctx, config, async () => {})
5450
}
51+
52+
function getJavaOptionsEnvVar(config: SamLaunchRequestArgs): string {
53+
switch (config.runtime) {
54+
case 'java11':
55+
// https://github.com/aws/aws-sam-cli/blob/86f88cbd7df365960f7015c5d086b0db7aedd9d5/samcli/local/docker/lambda_debug_settings.py#L53
56+
return `-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=*:${config.debugPort} -XX:MaxHeapSize=2834432k -XX:MaxMetaspaceSize=163840k -XX:ReservedCodeCacheSize=81920k -XX:+UseSerialGC -XX:-TieredCompilation -Djava.net.preferIPv4Stack=true`
57+
case 'java17':
58+
// https://github.com/aws/aws-sam-cli/blob/90aa5cf11e1c5cbfbe66aea2e2de10d478d48231/samcli/local/docker/lambda_debug_settings.py#L86
59+
return `-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=*:${config.debugPort} -XX:MaxHeapSize=2834432k -XX:+UseSerialGC -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Djava.net.preferIPv4Stack=true`
60+
default:
61+
return `-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=${config.debugPort} -XX:MaxHeapSize=2834432k -XX:MaxMetaspaceSize=163840k -XX:ReservedCodeCacheSize=81920k -XX:+UseSerialGC -XX:-TieredCompilation -Djava.net.preferIPv4Stack=true -Xshare:off`
62+
}
63+
}

src/test/lambda/models/samLambdaRuntime.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ describe('runtimes', function () {
9696
'dotnet6',
9797
'go1.x',
9898
'java11',
99+
'java17',
99100
'java8',
100101
'java8.al2',
101102
'nodejs14.x',
@@ -113,6 +114,7 @@ describe('runtimes', function () {
113114
'dotnet6',
114115
'go1.x',
115116
'java11',
117+
'java17',
116118
'java8',
117119
'java8.al2',
118120
'nodejs14.x',

src/test/shared/sam/debugger/samDebugConfigProvider.test.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,9 +1187,9 @@ describe('SamDebugConfigurationProvider', async function () {
11871187
await assertEqualNoDebugTemplateTarget(input, expected, folder, debugConfigProvider)
11881188
})
11891189

1190-
it('target=code: java maven', async function () {
1190+
it('target=code: java17 maven', async function () {
11911191
const appDir = pathutil.normalize(
1192-
path.join(testutil.getProjectDir(), 'testFixtures/workspaceFolder/java11-plain-maven-sam-app/')
1192+
path.join(testutil.getProjectDir(), 'testFixtures/workspaceFolder/java17-gradle/')
11931193
)
11941194
const folder = testutil.getWorkspaceFolder(appDir)
11951195
const handler = 'helloworld.App::handleRequest'
@@ -1203,15 +1203,15 @@ describe('SamDebugConfigurationProvider', async function () {
12031203
projectRoot: 'HelloWorldFunction',
12041204
},
12051205
lambda: {
1206-
runtime: 'java11',
1206+
runtime: 'java17',
12071207
},
12081208
}
12091209
const actual = (await debugConfigProvider.makeConfig(folder, input))! as SamLaunchRequestArgs
12101210
const expectedCodeRoot = (actual.baseBuildDir ?? 'fail') + '/input'
12111211
const expected: SamLaunchRequestArgs = {
12121212
awsCredentials: fakeCredentials,
12131213
request: 'attach', // Input "direct-invoke", output "attach".
1214-
runtime: 'java11',
1214+
runtime: 'java17',
12151215
runtimeFamily: lambdaModel.RuntimeFamily.Java,
12161216
useIkpdb: false,
12171217
type: AWS_SAM_DEBUG_TYPE,
@@ -1261,7 +1261,7 @@ describe('SamDebugConfigurationProvider', async function () {
12611261
Handler: ${handler}
12621262
CodeUri: >-
12631263
${input.invokeTarget.projectRoot}
1264-
Runtime: java11
1264+
Runtime: java17
12651265
`
12661266
)
12671267

@@ -1289,9 +1289,9 @@ describe('SamDebugConfigurationProvider', async function () {
12891289
assertEqualLaunchConfigs(actualNoDebug, expectedNoDebug)
12901290
})
12911291

1292-
it('target=code: java gradle', async function () {
1292+
it('target=code: java 17 gradle', async function () {
12931293
const appDir = pathutil.normalize(
1294-
path.join(testutil.getProjectDir(), 'testFixtures/workspaceFolder/java11-plain-gradle-sam-app/')
1294+
path.join(testutil.getProjectDir(), 'testFixtures/workspaceFolder/java17-gradle/')
12951295
)
12961296
const folder = testutil.getWorkspaceFolder(appDir)
12971297
const handler = 'helloworld.App::handleRequest'
@@ -1305,15 +1305,15 @@ describe('SamDebugConfigurationProvider', async function () {
13051305
projectRoot: 'HelloWorldFunction',
13061306
},
13071307
lambda: {
1308-
runtime: 'java11',
1308+
runtime: 'java17',
13091309
},
13101310
}
13111311
const actual = (await debugConfigProvider.makeConfig(folder, input))! as SamLaunchRequestArgs
13121312
const expectedCodeRoot = (actual.baseBuildDir ?? 'fail') + '/input'
13131313
const expected: SamLaunchRequestArgs = {
13141314
awsCredentials: fakeCredentials,
13151315
request: 'attach', // Input "direct-invoke", output "attach".
1316-
runtime: 'java11',
1316+
runtime: 'java17',
13171317
runtimeFamily: lambdaModel.RuntimeFamily.Java,
13181318
useIkpdb: false,
13191319
type: AWS_SAM_DEBUG_TYPE,
@@ -1363,7 +1363,7 @@ describe('SamDebugConfigurationProvider', async function () {
13631363
Handler: ${handler}
13641364
CodeUri: >-
13651365
${input.invokeTarget.projectRoot}
1366-
Runtime: java11
1366+
Runtime: java17
13671367
`
13681368
)
13691369

@@ -1394,7 +1394,7 @@ describe('SamDebugConfigurationProvider', async function () {
13941394
it('target=template: java maven', async function () {
13951395
const handler = 'helloworld.App::handleRequest'
13961396
const appDir = pathutil.normalize(
1397-
path.join(testutil.getProjectDir(), 'testFixtures/workspaceFolder/java11-plain-maven-sam-app/')
1397+
path.join(testutil.getProjectDir(), 'testFixtures/workspaceFolder/java17-maven/')
13981398
)
13991399
const folder = testutil.getWorkspaceFolder(appDir)
14001400
const input = {
@@ -1425,7 +1425,7 @@ describe('SamDebugConfigurationProvider', async function () {
14251425
const expected: SamLaunchRequestArgs = {
14261426
awsCredentials: fakeCredentials,
14271427
request: 'attach', // Input "direct-invoke", output "attach".
1428-
runtime: 'java11',
1428+
runtime: 'java17',
14291429
runtimeFamily: lambdaModel.RuntimeFamily.Java,
14301430
useIkpdb: false,
14311431
type: AWS_SAM_DEBUG_TYPE,
@@ -1449,7 +1449,7 @@ describe('SamDebugConfigurationProvider', async function () {
14491449
name: input.name,
14501450
templatePath: pathutil.normalize(path.join(path.dirname(templatePath.fsPath), 'template.yaml')),
14511451
parameterOverrides: undefined,
1452-
architecture: undefined,
1452+
architecture: 'x86_64',
14531453
}
14541454

14551455
const expectedDebug = {
@@ -1489,9 +1489,9 @@ describe('SamDebugConfigurationProvider', async function () {
14891489
assertEqualLaunchConfigs(actualNoDebug, expectedNoDebug)
14901490
})
14911491

1492-
it('target=template: Image java gradle', async function () {
1492+
it('target=template: Image java', async function () {
14931493
const appDir = pathutil.normalize(
1494-
path.join(testutil.getProjectDir(), 'testFixtures/workspaceFolder/java11-image-gradle-sam-app')
1494+
path.join(testutil.getProjectDir(), 'testFixtures/workspaceFolder/java17-image')
14951495
)
14961496
const folder = testutil.getWorkspaceFolder(appDir)
14971497
const input = {
@@ -1551,7 +1551,7 @@ describe('SamDebugConfigurationProvider', async function () {
15511551
name: input.name,
15521552
templatePath: pathutil.normalize(path.join(path.dirname(templatePath.fsPath), 'template.yaml')),
15531553
parameterOverrides: undefined,
1554-
architecture: undefined,
1554+
architecture: 'x86_64',
15551555
}
15561556

15571557
const expectedDebug = {

src/testFixtures/workspaceFolder/java11-image-gradle-sam-app/HelloWorldFunction/build.gradle

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/testFixtures/workspaceFolder/java11-image-gradle-sam-app/HelloWorldFunction/lambda-build-init.gradle

Lines changed: 0 additions & 105 deletions
This file was deleted.

src/testFixtures/workspaceFolder/java11-image-gradle-sam-app/template.yaml

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)