我正在尝试使用 Micronaut、GraalVM 和 Docker 在 Java 中创建和部署 AWS Lambda 函数。我正在按照本教程使用 GraalVM 运行时创建 AWS lambda。
我已经使用micronaut
command创建了 java 项目$ mn create-app my-app --features aws-api-gateway-graal
。然后在不更改代码或配置文件的情况下,尝试使用 GraalVM 原生镜像构建 Docker 镜像。在构建 graalvm 本机映像时的 docker build 步骤中,我收到以下警告:
警告:中止独立映像构建。在映像运行时 com.amazonaws.serverless.proxy.model.ContainerConfig 初始化或重新初始化的类的映像堆中不允许有任何实例。尝试使用 --initialize-at-build-time=com.amazonaws.serverless.proxy.model.ContainerConfig 将此类标记为构建时初始化
Detailed message: Trace: field io.micronaut.function.aws.proxy.AbstractLambdaContainerHandler.config
警告:使用 -H:+ReportExceptionStackTraces 打印底层异常的堆栈跟踪*
警告:图像“服务器”是一个后备图像,需要 JDK 才能执行(使用 --no-fallback 来抑制后备图像生成)。
构建后,我将带有引导文件的 docker 映像导出到 function.zip 文件,因为它是在教程中编写的。然后我将 function.zip 文件上传到我创建的 AWS lambda 函数,当我尝试测试函数时,我得到了这个错误:
{ "errorType": "Runtime.ExitError", "errorMessage": "RequestId: 888854d7-0e0e-42b4-a138-9a003c3455e1 Error: Runtime exited with error: exit status 1" }
START RequestId:888854d7-0e0e-42b4-a138-9a003c3455e1 版本:$LATEST
错误:没有 bin/java 并且没有环境变量 JAVA_HOME
END RequestId:888854d7-0e0e-42b4-a138-9a003c3455e1
REPORT RequestId:888854d7-0e0e-428 9a003c3455e1 持续时间:415.09 毫秒计费持续时间:500 毫秒内存大小:128 MB 使用的最大内存:16 MB
RequestId:888854d7-0e0e-42b4-a138-9a003c3455e1 错误:运行时退出错误:退出状态 1
Runtime.ExitError
我不知道出了什么问题。我还没有找到任何解决这个问题的方法。