我编写了一个代码,我将文件列在S3位置,然后在循环中将这些文件复制到临时文件夹进行处理。处理完毕后,我将这些文件移动到存档位置。
这个代码逻辑经常在cronjob中执行。
最近,我的代码失败了,因为在后续的代码执行中,它在列出它们时会以某种方式找到一些文件(在之前的执行中被移动),但在尝试复制时失败,因为文件实际上并不是存在。
我得到的错误是 - 调用HeadObject操作时发生客户端错误(404):Key {some-file}不存在。
有人可以帮助我理解我为什么要面对这个问题以及如何解决它?
非常感谢任何帮助。
答案 0 :(得分:0)
您可能遇到了一致性错误。当您将新对象放入存储桶时,S3具有读写后一致性,而对于对象上的所有其他操作,则具有eventual consistency。
要解决此问题,您可能需要在后续执行脚本之间等待更长时间。
答案 1 :(得分:0)
创建新文件时,可能需要一段时间才能在区域中的所有AZ之间完全同步。 如果失败,可能需要您重试读取。 请记住在读取之间应用随机和增加的等待,不要使系统过载,也要解决任何可能的竞争条件。 也不要永远重试,因为您要确保当前脚本的执行在新脚本之前结束。
另一种可能性是将脚本作为lambda函数运行,并在S3文件创建时触发。