我有一个bash脚本,它遍历一个文件名数组并从S3中删除它们。
以下命令:
aws s3 rm "s3://myBucket/myFolder/myFile.txt"
将产生此输出。
delete: s3://myBucket/myFolder/myFile.txt
通过验证已在AWS控制台中删除删除,我可以看到删除成功。 但是,如果我再次遍历同一个列表,即使文件已经消失,我也会得到相同的输出。
有没有办法 - 只使用rm命令 - 表明AWS CLI试图删除该文件但找不到它?
答案 0 :(得分:2)
s3 cli rm命令使用s3 API Delete Object operation
正如您在文档中看到的那样,这会添加一个"删除标记"对象。从某种意义上说,它被标记为"删除。 在制作基础对象实际存在的标记之前,似乎没有任何检查
随着S3存储的分发,在所有情况下都不保证一致性。
这意味着如果您要对某个文件执行某些操作然后检查它,那么答案肯定不确定
对于S3,AWS docs说
Amazon S3提供了在所有地区覆盖PUTS和DELETES的最终一致性。
"最终的一致性"意味着在未来的某个未定义的点上,所有分布式节点都将赶上更改,并且根据您所做的更改,查询返回的结果将如预期一样
所以基本上,这是一种冗长的说法:不,你不能得到确认文件被删除的确认。检查之后是否存在将无法可靠地运行