我有一个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提供了必要的权限。不知道还有什么不对。
1条答案
按热度按时间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[]的部分代码。