You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Spring Cloud Function部署AWS Lambda遇ClassNotFoundException问题求助

问题

通过AWS CLI部署基于Spring Cloud Function(Kotlin)的AWS Lambda函数,并配置S3 ObjectCreated事件触发后,触发Lambda时出现以下错误:

java.lang.ClassNotFoundException: org.springframework.cloud.function.adapter.aws.FunctionInvoker

环境信息

  • Spring Boot: 3.x
  • Spring Cloud Function: 4.x
  • 语言: Kotlin
  • 部署方式: Docker镜像推送到ECR,通过AWS CLI部署
  • 触发器: S3 ObjectCreated:*事件

已排查内容

  • 确认build.gradle.kts中包含spring-cloud-function-adapter-aws依赖
  • 本地使用相同入口运行JAR正常
  • 镜像已推送,Lambda通过CLI创建成功
解决方案

1. 修正Dockerfile配置

Spring Boot 3.x + Spring Cloud Function 4.x需要适配Lambda的Java运行时环境,调整Dockerfile如下:

  • 使用Lambda官方兼容的Java 17基础镜像(Spring Boot 3.x要求Java 17+)
  • 将全依赖JAR复制到Lambda指定的/var/task目录
  • 明确设置入口类为org.springframework.cloud.function.adapter.aws.FunctionInvoker

示例Dockerfile:

FROM public.ecr.aws/lambda/java:17
# 替换为你的全依赖JAR文件名
COPY build/libs/your-function-all.jar ${LAMBDA_TASK_ROOT}
CMD ["org.springframework.cloud.function.adapter.aws.FunctionInvoker"]

2. 确保Gradle打包包含所有依赖

Spring Cloud Function 4.x需要将spring-cloud-function-adapter-aws等依赖打入最终JAR,检查build.gradle.kts配置:

  • 使用shadowJar插件打包全依赖JAR(避免bootJar可能遗漏依赖的问题)
  • 示例核心配置:
plugins {
    id("org.springframework.boot") version "3.2.0"
    id("io.spring.dependency-management") version "1.1.4"
    kotlin("jvm") version "1.9.20"
    kotlin("plugin.spring") version "1.9.20"
    id("com.github.johnrengelman.shadow") version "8.1.1"
}

dependencies {
    implementation("org.springframework.cloud:spring-cloud-function-adapter-aws")
    implementation("com.amazonaws:aws-lambda-java-core")
    // 其他业务依赖...
}

tasks.withType<ShadowJar> {
    archiveClassifier.set("all")
    mergeServiceFiles()
}

执行./gradlew shadowJar生成全依赖JAR,用于Docker构建。

3. 验证Lambda运行时配置

  • 通过AWS CLI或控制台检查Lambda的处理程序(Handler),若使用Docker镜像部署,无需额外配置Handler,确保镜像的CMD已指向正确入口类即可
  • 若手动配置Handler,需设置为org.springframework.cloud.function.adapter.aws.FunctionInvoker

4. 重新构建推送镜像

  • 删除旧镜像,重新执行构建命令确保JAR复制完整
  • 推送新镜像到ECR后,重新部署Lambda函数,确保拉取最新镜像版本

内容的提问来源于stack exchange,提问作者HamTory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:01:02