S3 获取对象没有响应

问题描述 投票:0回答:1

我有一个连接到 API 网关的 lambda 函数。 lambda 函数从 S3 获取文件。但不知何故,我没有收到来自 S3 的任何响应,并且 API 网关请求超时。您能帮我理解这里的问题吗?

我要读取的文件大小只有20B

代码:-


 ClientConfiguration clientConfiguration = new ClientConfiguration();
 clientConfiguration.setMaxErrorRetry(5);
 clientConfiguration.setSocketTimeout(5000);
 AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                        .withClientConfiguration(clientConfiguration)
                        .withRegion("us-east-2")
                        .enableForceGlobalBucketAccess()
                        .build();
final GetObjectRequest getObjectRequest = new GetObjectRequest(<bucketName>, <objectKey>);
log.info("Get object from bucket {}", getObjectRequest);
S3Object object = s3Client.getObject(getObjectRequest);

之后没有任何反应:

s3Client.getObject()

我尝试过异常处理,验证了存储桶名称、密钥和区域。为 s3 和 lambda 提供必要的权限。不知道还有什么问题。

java amazon-web-services amazon-s3 aws-sdk
1个回答
0
投票

您的代码不是最佳实践。您正在使用 Java V1 - 不是推荐的 V2 版本。您可以从 API Gateway 调用的 Lambda 函数读取 S3 对象。 AWS 代码库中有一个完整的无服务器教程,展示了此用例。它使用适用于 Java V2 的 AWS 开发工具包。

看那个代码:

创建一个照片资产管理应用程序,让用户使用标签管理照片

此外 - 在 Lambda 函数中运行 AWS Java 代码时,您无需指定凭证即可使用 AWS 服务。相反 - 您使用有权调用特定 AWS 服务的角色来运行 Lambda 函数。

这是读取 S3 存储桶中的对象并返回 byte[] 的部分代码。

public class S3Service {
    // Create the S3Client object.
    private S3Client getClient() {
        return S3Client.builder()
            .region(PhotoApplicationResources.REGION)
            .build();
    }

    public byte[] getObjectBytes(String bucketName, String keyName) {
        S3Client s3 = getClient();
        try {
            GetObjectRequest objectRequest = GetObjectRequest
                .builder()
                .key(keyName)
                .bucket(bucketName)
                .build();

            ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(objectRequest);
            return objectBytes.asByteArray();
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            e.printStackTrace();
            throw e;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.