2015-10-13 417 views
2

我试图从用Java编写的AWS Lambda函数列出S3存储桶上的密钥。在本地运行代码可以正常工作(使用硬编码凭据)。从java访问s3 aws lambda

当LAMBDA运行相同的Java代码,它挂在listObjects

AmazonS3 s3client = new AmazonS3Client(new BasicAWSCredentials("XXXXXXXXXXXx", 
      "XXXXXXXXXXZZZZZZZZZZz")); 


ListObjectsRequest listObjectsRequest = new ListObjectsRequest() 
     .withBucketName(bucketName) 
     .withMaxKeys(10); 
ObjectListing objectListing; 

do { 
    objectListing = s3client.listObjects(listObjectsRequest); 

硬编码的用户凭据和LAMBDA执行角色都已经完全进入S3。

为什么S3访问挂起没有错误?什么权限配置错误?

运行期λ与事的NodeJS相媲美的作品

+0

你怎么知道它挂着?您为什么在不需要任何信息时对凭证进行硬编码 - 只需依靠假定的Lambda执行角色。 – jarmod

+0

如果尝试了假定的Lambda执行角色(并且稍后给出了该角色的管理权限,以防万一)。记录在listObjects上方,记录在listObjects未到达之后。执行本地listObjects需要大约一秒钟的时间。 – user85155

+0

您的Lambda函数超时是什么?默认值是3秒。此外,CloudWatch日志是否显示您的Lambda功能超时? – jarmod

回答

2

的解决方案是给LAMBDA更多的内存的工作。对于大多数运行Lambda报告,执行简单的S3 listObjects命令的周期为111 MB。所以128 MB是不够的,与512MB它工作正常。