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

14
AWS允许使用Java 8OpenJDK 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);
    }
}

有一种选项可以使用自定义运行时,以及一个包含Shell示例的教程。但是没有Java的示例。

已经有人使用自定义Java运行时处理过AWS Lambda吗?

4个回答

13

我也很好奇为什么我们还没有看到Java的定制运行时,所以大约一个月前,我开始尝试使用Java 11中的Jigsaw来构建小型运行时。虽然这不完全是教程,但我写了一个相当详细的Readme,说明如何构建它,而且代码足够简单易懂。

这是我的GitHub项目:

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

我刚刚发布了这个项目,它肯定是一个概念验证,使用风险自负。

Corretto看起来很有趣,但我猜仍然会有人更喜欢官方的OpenJDK发行版。我希望这可以成为Java开源运行时生产就绪的起点。


1
我还写了一篇博客文章,讨论了自定义运行时的一般情况以及我为什么创建它。这不是一个教程,因为我觉得它会重复GitHub readme中的很多内容。但它确实深入了解运行时的细节:https://andthearchitect.wordpress.com/2019/02/20/running-java-11-on-aws-lambda-using-custom-runtimes/ - Jberg

5

现在无需使用自定义运行时,因为 AWS Lambda 现在支持 Java 11

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

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


2
如所说,他们正在开发与Open JDK 11对应的Corretto 11版本,并将在2019年4月之前发布测试版…
但是,仍然可以添加自定义运行时,其允许“使用任何编程语言实现AWS Lambda运行时”。
官方AWS文档中没有JDK 11的示例,但我发现一个项目,该项目使用25MB的自定义运行时,构建自JDK 11,并使用jlink。您可以查看此链接。

1

完全可以通过自定义运行时实现,您可以在任何语言中实现运行时API。请参见下面的答案。 - Jberg
Lambda支持自定义运行时。 - gshauger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接