【问题标题】:Problem with creating AWS Lambda function using Micronaut and GraalVM使用 Micronaut 和 GraalVM 创建 AWS Lambda 函数的问题
【发布时间】:2019-06-24 11:38:43
【问题描述】:

我正在尝试使用 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 步骤中,我收到以下警告:

警告:正在中止独立映像构建。不允许有实例 初始化或重新初始化的类的图像堆 图像运行时 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-42b4-a138-9a003c3455e1 持续时间:415.09 毫秒 持续时间:500 毫秒内存大小:128 MB 使用的最大内存:16 MB
RequestId:888854d7-0e0e-42b4-a138-9a003c3455e1 错误:运行时已退出 出现错误:退出状态 1
Runtime.ExitError

我不知道出了什么问题。我还没有找到任何解决这个问题的方法。

【问题讨论】:

  • 尝试检查环境中是否设置了 JAVA_HOME
  • 你指的是什么环境?在我的 Linux 机器上安装了 java 并且 JAVA_HOME 设置正确。

标签: java docker aws-lambda micronaut graalvm


【解决方案1】:

此类调用ContainerConfig 类的静态方法defaultConfig

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

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2018-01-13
    • 2019-08-21
    • 2016-03-25
    • 2015-09-08
    • 2021-01-07
    相关资源
    最近更新 更多