如何使用 Open JDK 11+ 作为自定义运行时执行 AWS lambda?

How to execute AWS lambda with Open JDK 11+ as custom runtime?

AWS 允许使用 Java 8 (OpenJDK 8) 创建 Lambda 函数 作为运行时。 我需要使用 Open JDK 11 创建一个简单的函数。类似的东西:

package example;

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.LambdaLogger;

public class Hello {
    public String myHandler(int myCount, Context context) {
        LambdaLogger logger = context.getLogger();
        logger.log("received : " + myCount);
        return String.valueOf(myCount);
    }
}

有一个选项允许使用自定义运行时和 tutorial,其中包含 Shell 的示例。但是没有 Java 的例子。

是否有人已经使用自定义 java 运行时处理 AWS lambda?

我怀疑你还能做到。根据 AWS:

"We are working on Corretto 11 builds corresponding to Open JDK 11 and will release with time for testing before April, 2019."

https://forums.aws.amazon.com/thread.jspa?messageID=875742&tstart=0 https://aws.amazon.com/blogs/opensource/amazon-corretto-no-cost-distribution-openjdk-long-term-support/

作为 Arun Gupta said,他们正在开发 Corretto 11 对应 Open JDK 11 并会在2019年4月前随测试时间发布...

但是,仍然可以添加 custom runtime,这允许 "implement an AWS Lambda runtime in any programming language"。

官方 AWS 文档中没有 JDK 11 的示例,但我找到了一个项目,它使用 25MB 的自定义运行时,从 JDK 11 构建,使用 jlink。你可以看看这个link

我也很好奇为什么我们还没有看到 Java 的任何自定义运行时,所以大约一个月前我开始考虑在 Java 11 中构建一个使用 Jigsaw 生成小型运行时。虽然它不完全是一个教程,但我确实写了一个相当详细的关于如何构建它的自述文件,并且代码很简单,可以遵循。

这是我在 GitHub 上的项目:

https://github.com/andthearchitect/aws-lambda-java-runtime

我最近刚刚发布了这个,它肯定是一个 POC,所以使用风险自负。

Corretto 看起来很有趣,但我想仍然会有人对官方 OpenJDK 版本更满意。我希望这可能成为 Java 的生产就绪开源运行时的起点。

不再需要使用自定义 运行时间,因为 AWS Lambda now supports Java 11

但是,使用此 运行 时间的 Lambda 函数将 运行 与 Amazon Corretto 11 而不是 OpenJDK 11。

如果您希望 运行 使用 OpenJDK 11 而不是 Corretto 11 的 Lambda 函数,仍然建议使用自定义 运行time。