java S3获取对象无响应

9njqaruj  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(163)

我有一个lambda函数,它连接到API网关。lambda函数从S3获取一个文件。但不知何故,我没有从S3得到任何响应& API网关请求超时了。你能帮助我理解这个问题吗?
我试图读取的文件大小仅为20 B
验证码:-

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提供了必要的权限。不知道还有什么不对。

s4n0splo

s4n0splo1#

你的代码不是最佳实践。您正在使用Java V1 -而不是推荐的V2版本。您可以从API Gateway调用的Lambda函数读取S3对象。有一个完整的无服务器教程,在AWS Code Library中展示了这个用例。AWS SDK for Java V2
看看这段代码:
Create a photo asset management application that lets users manage photos using labels
此外-在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;
        }
    }

相关问题