我通过这段代码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