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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:03