java - AWS Lambda 使用 Java 与 AWS RDS 集成,但在加载类软件/amazon/awssdk/auth/credentials/AwsCredentialsProvider 时遇到错误
问题描述
这是我使用 java 在 aws lambda 中上传的代码。我使用 mvn clean package 制作了一个 jar 并上传到 lambda 函数服务,但出现错误 java.lang.NoClassDefFoundError: software/amazon/awssdk/auth/credentials/AwsCredentialsProvider
请帮帮我。
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.rdsdata.RdsDataClient;
import software.amazon.awssdk.services.rdsdata.model.ExecuteStatementRequest;
import software.amazon.awssdk.services.rdsdata.model.ExecuteStatementResponse;
import java.util.Collections;
public class LambdaJavaAPI implements RequestHandler<APIGatewayProxyRequestEvent, Object> {
public static final String AURORA_CLUSTER_ARN_ENV = "cluster key";
public static final String DATABASE_NAME_ENV = "mylab";
public static final String AURORA_SECRET_ARN_ENV = "security manager key";
/**
* @return an instance of RdsClient
*/
public static RdsDataClient rdsClient() {
Region region = Region.US_EAST_1;
return RdsDataClient.builder()
.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
.region(region)
.httpClientBuilder(UrlConnectionHttpClient.builder()).build();
}
@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) {
String responseBody = "Test Event";
final RdsDataClient rdsDataClient = new LambdaJavaAPI().rdsClient();
ExecuteStatementRequest request = ExecuteStatementRequest.builder()
.database(DATABASE_NAME_ENV)
.resourceArn(AURORA_CLUSTER_ARN_ENV)
.secretArn(AURORA_SECRET_ARN_ENV)
.sql(String.format("select name from users",DATABASE_NAME_ENV))
.build();
ExecuteStatementResponse executeStatementResponse = rdsDataClient.executeStatement(request);
if (executeStatementResponse.hasRecords()) {
}
return new APIGatewayProxyResponseEvent().withStatusCode(200)
.withIsBase64Encoded(Boolean.FALSE)
.withHeaders(Collections.emptyMap())
.withBody(responseBody);
}
}
解决方案
我使用 mvn clean package 制作了一个 jar
这只是打包你的课程;它不包括依赖项。
shade
相反,使用 Maven插件创建一个“uberjar” 。这在 AWS 文档中有所描述:https ://docs.aws.amazon.com/lambda/latest/dg/java-package.html
推荐阅读
- python - 在 Python 中实现 WGET 和 GREP 的最佳方法
- ios - NSMutableArray 不是 XML 格式
- javascript - 使用 Javascript 对 html 表进行数字排序 - 10 以上不起作用
- dart - “任务':app:flutterBuildDebug'的执行失败。”
- reactjs - 将日期字符串转换为 momentjs 对象 - Reactjs
- python - 我的功能使它无法做任何事情,除非我重新启动程序
- javascript - 向上移动 DOM 元素的 Javascript 动画(纯 js)
- c++ - 从子线程访问指针
- r - 如何在 dplyr 链中仅输出一个 ggplot 条的文本?
- php - 在知识库中使用多个面包屑