通过AWS S3部署AWS Lambda时出现ClassNotFound异常求助
问题原因
你遇到的类找不到问题,核心是S3上的zip包结构不符合Lambda Java运行时的要求。
当你用--zip-file直接上传Jar时,Lambda会自动识别这个Jar为部署包,将Jar内的类加入classpath;但如果你把Jar压缩成zip上传,Lambda解压后只会把Jar文件放在/var/task目录下,不会自动将这个Jar加入classpath,自然找不到里面的com.demo.lambda.handlers.DemoHandler类。
解决方案
方案1:直接上传Jar到S3(推荐)
不要把Jar压缩成zip,直接将maven-shade生成的Jar上传到S3,然后执行以下命令部署:
aws lambda update-function-code --function-name demo-test --s3-bucket build-owanbe-api-lambdas --s3-key demo-lambda-1.0-SNAPSHOT.jar
方案2:调整zip包结构(如果必须用zip)
如果一定要用zip包部署,需要修改压缩方式:
- 解压maven-shade生成的
demo-lambda-1.0-SNAPSHOT.jar文件 - 将解压后的所有文件(包括
com目录、依赖类文件等)直接压缩成zip(不要把Jar本身放进zip) - 把这个新zip上传到S3,再执行原来的部署命令
额外检查项
- 确认S3上的文件没有损坏:下载S3上的zip/Jar,和本地文件对比大小、校验哈希值
- 确认Lambda函数的handler配置依然是
com.demo.lambda.handlers.DemoHandler(本地部署正常的话这个应该没问题)
内容的提问来源于stack exchange,提问作者invincibles04
相关产品推荐
相关产品推荐

