我通過這段代碼AWS LAMBDA連接到S3 ObjectCreated事件恢復「NoSuchKey:指定的鍵不存在:
TransferUtility trasnferManager = new TransferUtility(s3, context);
trasnferManager.upload(..,..,..);
上傳從Android設備S3存儲文件後,我有一個lambda觸發連接到S3:ObjectCreated事件
當執行拉姆達我試圖通過S3.getObject()函數來獲取文件遺憾的是,有時我接受了。「NoSuchKey:指定的鍵不存在:」錯誤。之後,lambda重試幾次t imes併成功獲取文件並繼續執行。
在我看來,lambda函數是在S3中的文件可執行之前執行的嗎?但這不應該發生在設計上。在S3上的文件上傳完成後觸發器應該被觸發。
據公告上2015年8月4日:
亞馬遜S3水桶所有地區提供讀後寫一致性 新的對象和覆蓋PUTS最終一致性的PUTS 和DELETES。
事務後寫入一致性允許您在Amazon S3中創建後立即檢索對象。
但這之前:
除了美國標準所有地區(更名爲美國東(N.弗吉尼亞州))支持讀後寫新對象 一致性上傳到Amazon S3。
我鬥是美國東(N.弗吉尼亞州)區域,它是創建8月4日之前,2015年。我不知道,這可能是問題...
編輯:2016年10月20日
根據documentaion - 最終一致的讀取操作可以返回NO RESULT即使兩個或更多WRITE操作在它之前已經完成。
在本例中,W1(寫入1)和W2(寫入2)在R1(讀取1)和R2 (讀取2)開始之前完成。爲了一致的讀取,R1和R2都返回color = ruby。對於最終一致的 閱讀,R1和R2可能會返回color = red,color = ruby或沒有結果,具體取決於已經過去的時間量 。
請註明您所使用的終點,並在你的問題添加更多的代碼。這可能有所幫助 - https://forums.aws.amazon.com/ann.jspa?annID=3112 –
我正在使用「s3.amazonaws.com」。我認爲這已經過時了,因爲據說「所有地區的Amazon S3存儲桶都提供了讀寫後一致性」,而沒有附加信息。 – bpavlov
我有類似的問題,但並不總是如此。我發現大文件發生這種情況。我有一個事件觸發lambda,並且大部分時間lambda然後試圖移動文件並且成功。在較大的文件(38mb jpg)上,它表示它不存在並失敗。一旦lambda重新初始化因失敗而重試,它可以正常工作。似乎荒謬的是,事件會在文件訪問之前觸發。 – Joel