首页 > 解决方案 > 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);
    }
}

标签: javaamazon-web-servicesaws-lambdaaws-java-sdkaws-aurora-serverless

解决方案


我使用 mvn clean package 制作了一个 jar

这只是打包你的课程;它不包括依赖项。

shade相反,使用 Maven插件创建一个“uberjar” 。这在 AWS 文档中有所描述:https ://docs.aws.amazon.com/lambda/latest/dg/java-package.html


推荐阅读