【问题标题】:Running AWS Lambda / Spring Cloud Function in JDK 17 Docker image在 JDK 17 Docker 映像中运行 AWS Lambda / Spring Cloud Function
【发布时间】:2022-06-16 21:26:41
【问题描述】:

我正在升级 Spring Cloud Functions lambda 以在 JDK 17 上运行。Amazon 不提供 JDK 17 的基本映像,因此我没有部署 ZIP 文件,而是创建了一个运行 Docker 映像的 lambda。对于运行 Java 映像,我的 Dockerfile 通常如下所示:

FROM amazoncorretto:17
VOLUME /tmp
COPY ./my-lambda-project/build/libs/my-lambda-project-1.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

它运行首先使用 bootRun Gradle 任务创建的 jar。我的 Application.java 类的主要方法如下所示:

public static void main(String[] args) {
    FunctionalSpringApplication.run(Application.class, args);
}

主要方法使用 FunctionalSpringApplication 而不是 SpringApplication.run(为了更快地启动),在 lambda 配置中我将函数处理程序指定为 org.springframework.cloud.function.adapter.aws.FunctionInvoker::handleRequest。

使用 Dockerfile 方法,我可以使用 ENTRYPOINT 或 CMD 的某种组合。有没有办法让这个 docker 镜像在推送到 ECR 时使用 JDK 17 运行 lambda?

【问题讨论】:

    标签: java spring amazon-web-services docker aws-lambda


    【解决方案1】:

    您可以通过创建自己的自定义运行时在 AWS Lambda 上运行 Java 的替代版本。我的lambda-java17-layer Github repo 向您展示了如何做到这一点。

    如果您不喜欢这种方法并且想要坚持使用容器映像,那么您需要采取一些额外的步骤。

    您选择了标准的 amazoncorretto 基础映像来工作,您需要使用托管 Lambda base images 之一(除非您想自己做更多工作)

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2017-04-20
      • 2019-10-19
      • 1970-01-01
      • 2019-11-08
      • 2022-11-03
      相关资源
      最近更新 更多