Java开发AWS Lambda对接RDS缺失AwsCredentialsProvider类问题求助
问题根因
你遇到的java.lang.NoClassDefFoundError: software/amazon/awssdk/auth/credentials/AwsCredentialsProvider错误是因为你通过mvn clean package默认打包生成的是不包含第三方依赖的瘦jar,AWS Lambda运行环境没有内置AWS SDK for Java 2.x的相关类库,所以运行时找不到对应依赖类。
解决方案
1. 配置Maven打包插件生成含所有依赖的胖Jar
推荐使用maven-shade-plugin插件,在你的pom.xml的<build><plugins>节点下添加如下配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.0</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin>
如果使用maven-assembly-plugin也可以,注意指定打包格式为jar-with-dependencies即可。
2. 确认AWS SDK for Java 2.x依赖正确引入
在pom.xml中确保已引入所需的SDK依赖,推荐使用BOM统一管理SDK版本,避免版本冲突:
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.20.0</version> <!-- 替换为最新稳定版即可 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- Lambda核心依赖 --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.21</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-events</artifactId> <version>3.11.1</version> </dependency> <!-- RDS Data API依赖 --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>rdsdata</artifactId> </dependency> <!-- HTTP客户端依赖 --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>url-connection-client</artifactId> </dependency> </dependencies>
3. 打包上传验证
重新执行mvn clean package,在target目录下找到文件名带shaded后缀的jar包,上传该包到Lambda即可解决类找不到的问题。
额外优化建议
- 代码中硬编码的集群ARN、密钥ARN等配置,改为通过
System.getenv("环境变量名")从Lambda运行时环境变量读取,避免敏感信息硬编码到代码中 - 当前SQL语句的
String.format用法无效,你写的SQL中没有占位符,要么删除String.format直接写SQL,要么修改SQL为带占位符的格式,比如String.format("select name from %s.users", DATABASE_NAME_ENV) - 不要在每次请求时都新建
RdsDataClient,将其改为静态单例,Lambda冷启动后复用客户端实例,降低运行开销
内容的提问来源于stack exchange,提问作者Initials
相关产品推荐
相关产品推荐

