Amazon S3:列出时找到但在复制期间丢失的文件

时间:2016-10-17 19:13:50

标签: amazon-web-services amazon-s3 amazon-ec2 amazon

我编写了一个代码,我将文件列在S3位置,然后在循环中将这些文件复制到临时文件夹进行处理。处理完毕后,我将这些文件移动到存档位置。

这个代码逻辑经常在cronjob中执行。

最近,我的代码失败了,因为在后续的代码执行中,它在列出它们时会以某种方式找到一些文件(在之前的执行中被移动),但在尝试复制时失败,因为文件实际上并不是存在。

我得到的错误是 - 调用HeadObject操作时发生客户端错误(404):Key {some-file}不存在。

有人可以帮助我理解我为什么要面对这个问题以及如何解决它?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您可能遇到了一致性错误。当您将新对象放入存储桶时,S3具有读写后一致性,而对于对象上的所有其他操作,则具有eventual consistency

要解决此问题,您可能需要在后续执行脚本之间等待更长时间。

答案 1 :(得分:0)

创建新文件时,可能需要一段时间才能在区域中的所有AZ之间完全同步。 如果失败,可能需要您重试读取。 请记住在读取之间应用随机和增加的等待,不要使系统过载,也要解决任何可能的竞争条件。 也不要永远重试,因为您要确保当前脚本的执行在新脚本之前结束。

另一种可能性是将脚本作为lambda函数运行,并在S3文件创建时触发。