From aa225ec89e1ac69746aaa29efd2896c02a9c22c7 Mon Sep 17 00:00:00 2001 From: Agustin Celentano <12614595+agustincelentano@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:46:11 -0300 Subject: [PATCH] feature(lambda): update ZIP runtime list and default to nodejs22.x Refresh the runtime options against the current AWS Lambda supported runtimes table and move the default off nodejs20.x, deprecated by AWS on Apr 30, 2026. - Add nodejs24.x, nodejs22.x, python3.14, java25, dotnet10, ruby4.0 and ruby3.4 to the service spec; drop nodejs18.x - Default runtime is now nodejs22.x, in the spec and in every bash and tofu fallback - The scope-creation placeholder no longer pins nodejs20.x, which AWS blocks for create-function starting Feb 1, 2027 --- lambda/deployment/build_context | 2 +- .../deployment/scripts/update_function_configuration | 6 +++--- lambda/scope/build_context | 2 +- lambda/scope/scripts/create_placeholder_lambda | 2 +- lambda/scope/tofu/compute/lambda/modules/variables.tf | 2 +- lambda/scope/tofu/compute/lambda/setup | 6 +++--- lambda/specs/service-spec.json.tpl | 10 ++++++++-- 7 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lambda/deployment/build_context b/lambda/deployment/build_context index adfd763..90b667d 100755 --- a/lambda/deployment/build_context +++ b/lambda/deployment/build_context @@ -175,7 +175,7 @@ log debug " ✅ ephemeral_storage=$LAMBDA_EPHEMERAL_STORAGE" LAMBDA_RUNTIME=$(get_config_value \ --provider '.scope.capabilities.runtime' \ - --default "nodejs20.x" + --default "nodejs22.x" ) log debug " ✅ runtime=$LAMBDA_RUNTIME" diff --git a/lambda/deployment/scripts/update_function_configuration b/lambda/deployment/scripts/update_function_configuration index d600a4d..47275f0 100755 --- a/lambda/deployment/scripts/update_function_configuration +++ b/lambda/deployment/scripts/update_function_configuration @@ -5,7 +5,7 @@ # # This is necessary because update-function-code only changes the code/image, # not the configuration. Scope-create provisions the Lambda with placeholder -# values (e.g. handler=index.handler, runtime=nodejs20.x) that must be +# values (e.g. handler=index.handler, runtime=nodejs22.x) that must be # overwritten with the real values from capabilities on first deployment. source "$SERVICE_PATH/utils/log" @@ -39,10 +39,10 @@ log debug " ✅ ephemeral_storage=${LAMBDA_EPHEMERAL_STORAGE:-512}" package_type="${PACKAGE_TYPE:-Image}" if [ "$package_type" = "Zip" ]; then cli_args+=( - --runtime "${LAMBDA_RUNTIME:-nodejs20.x}" + --runtime "${LAMBDA_RUNTIME:-nodejs22.x}" --handler "${LAMBDA_HANDLER:-index.handler}" ) - log debug " ✅ runtime=${LAMBDA_RUNTIME:-nodejs20.x}" + log debug " ✅ runtime=${LAMBDA_RUNTIME:-nodejs22.x}" log debug " ✅ handler=${LAMBDA_HANDLER:-index.handler}" fi diff --git a/lambda/scope/build_context b/lambda/scope/build_context index dc0d209..f8c3a89 100755 --- a/lambda/scope/build_context +++ b/lambda/scope/build_context @@ -82,7 +82,7 @@ else ASSET_TYPE="docker-image" fi -RUNTIME=$(echo "$CONTEXT" | jq -r '.scope.capabilities.runtime // "nodejs20.x"') +RUNTIME=$(echo "$CONTEXT" | jq -r '.scope.capabilities.runtime // "nodejs22.x"') HANDLER=$(echo "$CONTEXT" | jq -r '.scope.capabilities.handler // "index.handler"') log debug " ✅ package_type=$PACKAGE_TYPE" diff --git a/lambda/scope/scripts/create_placeholder_lambda b/lambda/scope/scripts/create_placeholder_lambda index 7d520d0..920b4c5 100755 --- a/lambda/scope/scripts/create_placeholder_lambda +++ b/lambda/scope/scripts/create_placeholder_lambda @@ -41,7 +41,7 @@ echo " 📋 role_arn=$LAMBDA_ROLE_ARN" # Determine package type from capabilities or environment package_type="${PACKAGE_TYPE:-Zip}" -runtime="${RUNTIME:-nodejs20.x}" +runtime="${RUNTIME:-nodejs22.x}" handler="${HANDLER:-index.handler}" architecture="${ARCHITECTURE:-arm64}" diff --git a/lambda/scope/tofu/compute/lambda/modules/variables.tf b/lambda/scope/tofu/compute/lambda/modules/variables.tf index a1ec15a..e3446c1 100644 --- a/lambda/scope/tofu/compute/lambda/modules/variables.tf +++ b/lambda/scope/tofu/compute/lambda/modules/variables.tf @@ -6,7 +6,7 @@ variable "lambda_function_name" { variable "lambda_runtime" { description = "Lambda runtime identifier" type = string - default = "nodejs20.x" + default = "nodejs22.x" } variable "lambda_handler" { diff --git a/lambda/scope/tofu/compute/lambda/setup b/lambda/scope/tofu/compute/lambda/setup index 257db0a..40b3da9 100755 --- a/lambda/scope/tofu/compute/lambda/setup +++ b/lambda/scope/tofu/compute/lambda/setup @@ -60,14 +60,14 @@ memory=$(echo "$CONTEXT" | jq -r '.scope.capabilities.memory // 256') timeout=$(echo "$CONTEXT" | jq -r '.scope.capabilities.timeout // 30') ephemeral_storage=$(echo "$CONTEXT" | jq -r '.scope.capabilities.ephemeral_storage // 512') architecture=$(echo "$CONTEXT" | jq -r '.scope.capabilities.architecture // "arm64"') -runtime=$(echo "$CONTEXT" | jq -r '.scope.capabilities.runtime // "nodejs20.x"') +runtime=$(echo "$CONTEXT" | jq -r '.scope.capabilities.runtime // "nodejs22.x"') handler=$(echo "$CONTEXT" | jq -r '.scope.capabilities.handler // "index.handler"') -# When deploying the placeholder zip (scope creation), always use nodejs20.x so the +# When deploying the placeholder zip (scope creation), always use nodejs22.x so the # runtime matches the placeholder code. The first real deployment will set the correct # runtime from capabilities. if [ -n "$lambda_filename" ]; then - runtime="nodejs20.x" + runtime="nodejs22.x" handler="index.handler" fi diff --git a/lambda/specs/service-spec.json.tpl b/lambda/specs/service-spec.json.tpl index dda747b..3fbdd0c 100644 --- a/lambda/specs/service-spec.json.tpl +++ b/lambda/specs/service-spec.json.tpl @@ -224,18 +224,24 @@ "type": "string", "title": "Runtime", "description": "Lambda runtime environment for your ZIP deployment", - "default": "nodejs20.x", + "default": "nodejs22.x", "oneOf": [ + { "const": "nodejs24.x", "title": "Node.js 24.x" }, + { "const": "nodejs22.x", "title": "Node.js 22.x" }, { "const": "nodejs20.x", "title": "Node.js 20.x" }, - { "const": "nodejs18.x", "title": "Node.js 18.x" }, + { "const": "python3.14", "title": "Python 3.14" }, { "const": "python3.13", "title": "Python 3.13" }, { "const": "python3.12", "title": "Python 3.12" }, { "const": "python3.11", "title": "Python 3.11" }, { "const": "python3.10", "title": "Python 3.10" }, + { "const": "java25", "title": "Java 25" }, { "const": "java21", "title": "Java 21" }, { "const": "java17", "title": "Java 17" }, { "const": "java11", "title": "Java 11" }, + { "const": "dotnet10", "title": ".NET 10" }, { "const": "dotnet8", "title": ".NET 8" }, + { "const": "ruby4.0", "title": "Ruby 4.0" }, + { "const": "ruby3.4", "title": "Ruby 3.4" }, { "const": "ruby3.3", "title": "Ruby 3.3" }, { "const": "provided.al2023", "title": "Custom Runtime (Amazon Linux 2023)" } ]