我的 AWS 账单上的 Amazon S3 费用异常高。我该如何降低 Amazon S3 成本?

上次更新时间:2020 年 5 月 28 日

我的 AWS 账单上的 Amazon Simple Storage Service (Amazon S3) 使用费高于预期。我该如何降低 Amazon S3 成本?

简短描述

Amazon S3 费用基于存储、请求和数据检索、数据传输(包括 S3 Transfer Acceleration 的使用)以及数据管理。为了确定可在哪些方面降低 Amazon S3 费用,最佳做法是首先了解 Amazon S3 的当前账单和使用情况以及产生费用的方式

在了解如何对 Amazon S3 收费之后,您可以尝试通过以下方法来审查并尽可能降低成本:

  • 清理未完成的分段上传
  • 删除不需要的先前版本的对象
  • 审查您的存储类转换成本
  • 审查您的数据检索成本
  • 跟踪对存储桶发出的请求
  • 检查存储桶大小的变化
  • 审查单个存储桶的成本
  • 了解使用量与费用之间的关系

解决方法

清理未完成的分段上传

启动分段上传后,Amazon S3 会保留文件的所有已上传部分,直到您完成或中止分段上传。如果您未成功完成分段上传,则默认情况下 Amazon S3 会继续存储已上传的部分。这意味着,您需要支付已上传部分的存储费用。

如果您使用 AWS 命令行界面 (AWS CLI) 终止分段上传 (abort-multipart-upload),则该操作将删除未完成的分段上传的已上传部分。但是,如果您使用其他采用 Amazon S3 分段上传 API 的工具,则未完成的分段上传可能会遗留已上传部分。

为了避免未完成的分段上传遗留的已上传部分产生存储费用,您可以创建生命周期策略,以在特定天数后清理未完成的分段上传。

此外,您还可以使用 Amazon S3 API 调用列出分段上传,然后中止已失败或想要取消的任何分段上传

删除不需要的先前版本的对象

警告:请谨慎操作,仅删除不需要的对象或对象版本。Amazon S3 无法还原您从存储桶中删除的任何数据。

如果您已在存储桶中启用版本控制,则每个对象可能具有多个版本。每个对象版本都会增加您的存储成本。

要查看您的对象版本,您可以使用 Amazon S3 控制台,也可以运行 ListObjectVersions API 调用。然后,您可以删除不再需要的对象版本

注意:在已启用版本控制的存储桶中,您必须指定对象版本 ID 才能永久删除对象版本。如果您对已启用版本控制的存储桶中的对象运行简单删除请求,则 Amazon S3 会向该对象添加删除标记。删除标记将成为该对象的当前版本,同时实际的对象将成为早期版本。但是,实际上不会擦除对象及其版本。

您还可以使用生命周期规则来管理对象的当前版本和非当前版本。但是,您必须仔细检查生命周期规则的参数,因为 Amazon S3 中的永久删除是不可逆的。

审查您的存储类转换成本

将对象转换为其他存储类以降低当前存储成本是一种常见做法。但是,将对象从一种存储类转换为另一种存储类可能会产生相关费用,了解这一点也很重要。

例如,对于从 Amazon S3 标准存储类转换为 Amazon S3 标准 – 不频繁访问(S3 标准 – IA)存储类的对象,每 1000 次生命周期转换请求将产生 0.01 USD 的费用。对于从任何存储类转换为 Amazon Simple Storage Service Glacier (Amazon S3 Glacier) 存储类的对象,每 1000 次生命周期转换请求将产生 0.05 USD 的费用。有关更多信息和定价详细信息,请参阅 Amazon S3 定价

如果您设置了生命周期配置规则,用于将包含数百万个对象的整个存储桶转换为另一种存储类,则 Amazon S3 费用预计会增加。要确定费用增加是否因生命周期规则所致,您可以在 AWS CloudTrail 事件历史记录Amazon S3 服务器访问日志中查看 PutBucketLifecycleConfiguration 调用,以确定应用规则的时间。

审查您的数据检索成本

存储在 S3 标准 – IA、S3 单区 – IA、Amazon S3 Glacier 或 Amazon S3 Glacier Deep Archive 存储类中的对象具有与数据检索相关的费用。

例如,如果您要从 Amazon S3 Glacier 存储类中检索 1500 万个对象,这些对象总共包含 100 TB 数据,则检索总费用将取决于您选择的检索选项:

批量检索:

  • 检索请求费用为 15000000 / 1000 * 0.025 USD = 375 USD。
  • 检索费用为 100000 * 0.0025 USD = 250 USD。
  • 总费用为 625 USD。

标准检索:

  • 检索请求费用为 15000000 / 1000 * 0.05 USD = 750 USD。
  • 检索费用为 100000 * 0.01 USD = 1000 USD。
  • 总费用为 1750 USD。

加速检索:

  • 检索请求费用为 15000000 / 1000 * 10 USD = 150000 美元。
  • 检索费用为 100000 * 0.03 USD = 3000 USD。
  • 总费用为 153000 USD。

跟踪对存储桶发出的请求

您可以通过以下一种或多种方式监控对存储桶的请求:

在了解对存储桶发出的请求后,您可以采取措施来降低请求产生的费用。例如,您可以使用存储桶策略或 AWS Identity and Access Management (IAM) 策略来防止未经授权的访问或限制对存储桶的公开访问。或者,为了减少数据传输的输出费用,您可以使用与存储桶位于同一 AWS 区域内的 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例来访问存储桶。

检查存储桶大小的变化

要分离存储成本,您可以将存储桶的当前大小与上个月的存储桶大小进行比较。您可以在 Amazon S3 控制台中查看存储桶的存储大小:

  1. Amazon S3 控制台查看您的存储桶。
  2. 选择管理选项卡。
  3. 选择指标

您还可以使用 AWS CLI 或 CloudWatch 控制台查看存储桶的存储大小。

审查单个存储桶的成本

要确定某个特定存储桶是否导致较高的成本,您可以在存储桶上激活成本分配标签,然后使用 AWS Cost Explorer 查看存储桶

了解使用量与费用之间的关系

您的使用情况报告以字节-小时为单位记录存储使用量,而账单报告则以 GB-月为单位记录存储使用量。因此,要了解存储使用量与存储费用之间的关系,必须将字节-小时转换为 GB-月。有关此转换的示例,请参阅将使用量字节-小时转换为计费 GB-月

您可以从账单和成本管理控制面板下载 Amazon S3 使用情况报告。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?