【问题标题】:Prevent AWS S3 from removing empty directories?防止 AWS S3 删除空目录?
【发布时间】:2021-11-29 15:58:20
【问题描述】:

好的,第一件事;我知道 S3 没有“目录”,它们都是恰好具有相同 Key 前缀且名称中带有斜杠的对象……因此,无需评论或回答 S3 没有目录!

虽然,很多软件都在“检测”带有斜杠的键作为目录,我们使用的 SFTP 服务器软件就是其中之一。我们托管了一个使用 AWS S3 作为“文件系统”的 SFTP 服务器,其中有一个带有“目录”的存储桶,存储桶根目录中的每个目录都是一个 SFTP 用户主目录。

问题在于 AWS 正在删除空的“目录”(以斜杠结尾的零字节对象),因此如果 SFTP 用户删除了他们所有的文件(或者他们还没有收到任何文件)AWS 会删除“目录”,然后当目录消失时,用户尝试连接到我们的 SFTP 时出现错误。

一个明显的解决方案是添加一个“阻止程序”文件,例如readme.txt 或类似于“目录”,所以那里有一些东西,但大多数客户似乎也删除了这些......还有一些其他的东西可能会“锁定”(例如对象锁定)文件被删除但是如果 SFTP 客户端尝试删除所有文件,这反过来又会导致错误,我们希望避免抛出错误(并显示不必要的文件)...

那么,有什么方法可以阻止 AWS S3 删除空的“目录”?

【问题讨论】:

  • 请将您的问题移至Super User(在此处删除,在此处重新发布)。这是off-topic here。在那里重新发布时,请告诉我们更多关于“我们托管使用 AWS S3 作为“文件系统”的 SFTP 服务器'。这是您的自定义解决方案吗?还是您使用的是 Amazon SFTP?跨度>

标签: amazon-web-services amazon-s3


【解决方案1】:

如果您通过s3api(而不是s3)创建目录 - 它不会被删除。

例如,

aws s3api put-object --bucket mybucket --key home/user1/

然后你可以复制和删除这个目录中的文件

我不知道 SFTP 是如何工作的,但是如果您在 AWS 控制台或 WinSCP 中单击“创建文件夹”按钮,就会发生这种情况。我认为 SFTP 也有类似的东西。

【讨论】:

  • 我们通过 AWS SDK (Node) 创建“目录”,应该是put-object 然后我假设...
  • 我们使用 CLI;所以我不确定 - 但 Node 必须具有相同的 API,包括 s3api
  • 通过 Node aws-sdk 创建目录大约 24 小时后,“目录”仍然存在,所以这可能是解决方案!谢谢!