【问题标题】:Cheapest way to delete 2 billion objects from S3 IA从 S3 IA 中删除 20 亿个对象的最便宜方法
【发布时间】:2019-06-12 20:05:57
【问题描述】:

我在 S3(不频繁访问)中有一个包含 20 亿个对象的存储桶。在控制台或通过 api 删除太大而无需花费数年时间。

我可以创建一个生命周期规则来过期并删除对象,但计算器预测这将花费我 >20,000 美元。那是对的吗?有没有更好的方法来删除存储桶?

如果有帮助,我有一个有效地包含该存储桶中所有对象的列表的文件。

2021 年更新:

@MAP 下面的回答指出现在有一个“空”按钮。我还没有测试,但看起来不错(测试后我会接受这个答案):

【问题讨论】:

  • 这似乎是不正确的。计算器显示的究竟是什么?
  • 我部分误读了计算器,我认为 DELETES 会出现在 GET 请求或其他请求中,两者都需要花费数千美元。
  • S3 IA 的 2B 生命周期转换仍然需要 2 万美元

标签: amazon-web-services amazon-s3 aws-sdk


【解决方案1】:

如果您有所有可用对象的列表,那么您当然可以使用Multi Delete Object 操作。显然这是API is free。我会通过文件创建AWS Step Functions state machine to loop 并一次删除 1000 个对象。 1000 似乎是极限。

删除存储桶中的所有对象大约需要 2M 步函数事务。根据 pricing 的步进函数,它的成本约为 50 美元 + cost of Lambda invocations 约为 1 美元,因此总成本约为 51 美元。

更新

使用 Lambda 或 Step Functions 可能不是最具成本效益的选择,因为这两种方式都需要从 S3 等来源读取文件(包含对象键)。所以我认为从本地机器或任何 EC2 linux 屏幕运行脚本似乎是最好的选择。

【讨论】:

  • 谢谢,我们就是这样做的。
  • 嗯,有点,我们正在使用 Flink 来破解它,但原理是一样的。感谢您提供有关多重删除 api 的提示 :)
  • 对任何这样做的人的重大警告:我们后来才意识到我们为此存储桶启用了版本控制......呃。多对象删除只是为每个对象添加了“删除标记”。总大小刚刚增加,对象数量增加了一倍!已禁用版本控制并再次运行...
【解决方案2】:

在 2021 年,遇到此问题的任何人都可能会知道 AWS 控制台现在提供了一个 empty 按钮。

选择存储桶并单击“清空”按钮,所有版本化或未版本化的对象都将被清空/删除。根据对象的数量,可能需要几分钟到几天的时间。

【讨论】:

    【解决方案3】:

    删除操作是免费的。您可以创建生命周期 自动批量删除的策略。

    我会先从少量对象开始,然后检查计费报告以 100% 确认删除不会收费,然后再处理其余的。

    【讨论】:

    • 删除操作是免费的,但据我所知,生命周期转换并不重要。计算器预测 20k
    • IA 的删除操作是否免费?这是我的假设,对于其他类,它们是,但 pricing page 意味着对于 IA 和 1ZIA,它们实际上并不是免费的。
    • 我确认删除是免费的,即使在 IA 上也是如此。我正在与服务团队核实 Matt 上面关于生命周期转换的观点。
    • @SébastienStormacq 您是否曾收到服务团队关于使用生命周期转换删除的价格的回复?
    【解决方案4】:

    到期生命周期规则是免费的。来自原feature announcement

    与标准删除请求一样,Amazon S3 不会因使用对象过期而向您收费。

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2017-03-09
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多