【问题标题】:How to specify an object expiration prefix that doesn't match the directory?如何指定与目录不匹配的对象过期前缀?
【发布时间】:2012-03-14 09:38:28
【问题描述】:

我有一个包含 imgmovtmp 目录的 S3 存储桶。我希望添加到tmp 的所有内容在超过三天后自动删除。所以我在我的存储桶上设置了object expiration 规则,如下所示:

  • 前缀:“tmp/”
  • 有效期:3

问题是,虽然tmp 中的文件会按计划删除,但tmp 本身也匹配此前缀(尽管有尾部斜杠)并且每三天被删除一次。

是否有任何前缀可以匹配tmp 的内容,但不匹配tmp 本身?像“tmp/*”这样的东西(虽然这不起作用)?

【问题讨论】:

    标签: amazon-s3


    【解决方案1】:

    你为什么要保留tmp

    Amazon S3 实际上并没有文件夹/目录的原生概念,而是一个仅由存储桶和对象/键组成的平面存储架构 - 大多数 S3 工具中都可以看到目录样式表示(包括 AWS Management Console本身)仅基于约定,即模拟具有相同前缀的对象的层次结构(例如tmp/在您的情况下);请参阅相应的常见问题解答How is Amazon S3 data organized?

    Amazon S3 是一个简单的基于键的对象存储。当您存储数据时,您 分配一个唯一的对象键,以后可以使用它来检索 数据。键可以是任意字符串,可以构造成模仿 分层属性。

    [强调我的]

    此架构在Amazon S3 Concepts 中有更详细的说明:

    存储桶是存储在 Amazon S3 中的对象的容器。每一个物体 包含在一个桶中。例如,如果对象 named photos/puppy.jpg 存储在 johnsmith 存储桶中,则为 可使用 URL 寻址 http://johnsmith.s3.amazonaws.com/photos/puppy.jpg

    [...]

    按键

    键是存储桶中对象的唯一标识符。 桶中的对象只有一个键。因为一个组合 存储桶、密钥和版本 ID 唯一标识每个对象,Amazon S3 可以认为是“bucket + key + version”之间的基本数据映射 和对象本身。

    [强调我的]

    因此根本不需要关心这些“目录”,只要你碰巧存储了一个名称中带有相应前缀的对象,它们就会重新出现。

    【讨论】:

    • 我从你的回答中假设我想要的东西是不可能的?那是对的吗?至于我为什么想要它,因为使用它的人没有通过 API 与它交互。他们通过 Transmit 和管理控制台这样做。我告诉他们“将要过期的文件放在tmp 目录中”比说“首先,如果tmp 目录不存在,请创建它”更容易。
    • @jemmons:我明白了,一个可以理解的用例 - 不幸的是,这确实不可能开箱即用。一种可能的解决方法可能是通过适当的S3 Access Control 解决方案来保护tmp 对象不被删除,即Bucket PolicyIAM Policy;我现在不确定是否可以像这样控制/否决对象过期。
    【解决方案2】:

    似乎这应该可以使用 IAM:您创建一个 IAM 用户,该用户只能删除 tmp(而不是 tmp/ 本身)中的文件,然后使用该用户在存储桶上放置一个生命周期。那么 tmp/ 对象将不会被删除。

    但文档对此并不太清楚 - 您必须对其进行测试。

    【讨论】:

    • 这是基于对密钥工作原理的误解,如果您创建 tmp/file.txt 则没有 没有这样的对象 tmp,因此无需删除任何内容,也无需保护任何内容.
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2023-01-19
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多