Community-Managed AWS Lambda Base Images for Java 20

I’ve added a new custom base image for Java 20 on Lambda to complement the community base images already available for Java 17, Java 18, and Java 19. You can find the images on the ECR Public Gallery and DockerHub and the source code on GitHub. All the new features in Java 20 are in preview or incubator, as befits a non-LTS release, but for those who like to live life on the bleeding edge, there’s lots of new toys to play with. These base images will let you get started.

Why Java 20?

You can read the full list of Java 20 changes here, but the new (or newly stable) features I’m particularly excited about are:

  • Scoped Values — An update to ThreadLocal variables.
  • Vector API — Now in its fifth preview, the vector API is starting to feel pretty stable. If you’re interested to learn more, I highly recommend the recent JEP Cafe episode to get started.

And, of course, we get to keep getting to know the other features in preview, like Record Patterns and Virtual Threads, a.k.a. Project Loom.

Where Can I Find the Base Images?

The images are publicly available on the ECR Public Gallery and DockerHub. I will also make them available on the other major Docker registries, but I’ll make sure that at least the current images stay available on that repository going forward.

How Do I Use Them?

Using these custom base images is just like using stock AWS base images. You can find an example on GitHub at aleph0io/example-java-lambda-function. For convenience, find the Dockerfile below. Note the FROM clause:

FROM public.ecr.aws/aleph0io/lambda/java:20.0.0-al2

COPY target/hello-lambda.jar "${LAMBDA_TASK_ROOT}/lib/"

CMD [ "com.sigpwned.lambda.hello.HelloLambda::handleRequest" ]

How Mature Are They?

The Java 20 images are all tested live on Lambda on deployment, but I have not built any production services with them. (And Java 20 itself is brand spanking new, so it could have bugs of its own!) Also, they are not (well) optimized for size, cold start time, or performance, so please consider them experimental, at least for now. All feedback and PRs welcome!

Can I see the Source Code?

Of course! The source code is released under the Apache 2.0 license. If you’re curious, you can find the source code for the base image on GitHub at aleph0io/aws-lambda-java-base-images.