我正在尝试使用Micronaut,GraalVM和Docker在Java中创建和部署AWS Lambda函数。我正在关注this tutorial以使用GraalVM运行时创建AWS lambda。
我已经使用micronaut
命令$ mn create-app my-app --features aws-api-gateway-graal
创建了Java项目。然后,在代码或配置文件中没有任何更改的情况下,尝试使用GraalVM本机镜像构建Docker镜像。在构建graalvm本机镜像时的docker build步骤中,我收到以下警告:
构建后,我将带有 bootstrap 文件的docker镜像导出为在教程中编写的function.zip文件。然后,我将function.zip文件上传到我创建的AWS lambda函数中,当我尝试测试函数时,出现此错误:
我不知道怎么了我还没有找到解决此问题的方法。
最佳答案
此类调用defaultConfig
类的静态方法ContainerConfig
。
io.micronaut.function.aws.proxy.AbstractLambdaContainerHandler
com.amazonaws.serverless.proxy.internal.LambdaContainerHandler
为了解决该问题,我们需要在运行时而不是编译时初始化该类。
我对GraalVM完全陌生,目前无法解释其原因。
我的
native-image
配置。native-image
--delay-class-initialization-to-runtime=io.micronaut.function.aws.proxy.AbstractLambdaContainerHandler,com.amazonaws.serverless.proxy.internal.LambdaContainerHandler
--no-fallback
--no-server
-cp build/libs/yourJarName.jar
资源:
https://medium.com/graalvm/understanding-class-initialization-in-graalvm-native-image-generation-d765b7e4d6ed