2015-10-13 416 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它工作正常。