使用 Amazon S3 存储类 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon S3 存储类

Amazon S3 中的每个对象都有与之关联的存储类。例如,如果您列出 S3 存储桶中的对象,则控制台会在列表中显示所有对象的存储类。Amazon S3 将为您存储的对象提供一系列存储类。请根据您的使用案例场景和性能访问要求选择一个类。所有这些存储类都提供高持久性存储。

以下各节提供了关于各种存储类以及如何为对象设置存储类的详细信息。

经常访问对象的存储类

对于性能敏感的使用案例(需要毫秒级访问时间的用例)和经常访问的数据,Amazon S3 提供以下存储类:

  • S3 Standard – 默认存储类。如果在上传对象时未指定存储类,Amazon S3 会分配 S3 Standard 存储类。

  • S3 Express One Zone – Amazon S3 Express One Zone 是高性能的单区 Amazon S3 存储类,专门用于为延迟要求极高的应用程序提供稳定的毫秒级数据访问。S3 Express One Zone 是目前具有极低延迟的云对象存储类,相比 S3 Standard,其数据访问速度要快 10 倍,且请求成本低 50%。使用 S3 Express One Zone,您的数据将冗余地存储在单个可用区中的多个设备上。有关更多信息,请参阅什么是 S3 Express One Zone?

  • 低冗余存储 – 低冗余存储(RRS)存储类设计用于可使用低于 S3 Standard 存储类的冗余级别存储的非关键性、可复现数据。

    重要

    我们建议不要使用此存储类。S3 Standard 存储类更经济高效。

    为了实现持久性,RRS 对象的预期平均每年对象损失率为 0.01%。如果 RRS 对象丢失,则在对该对象发出请求时,Amazon S3 会返回 405 错误。

用于自动优化访问模式不断变化或未知的数据的存储类

S3 Intelligent-Tiering 是一种 Amazon S3 存储类,旨在通过自动将数据移动到最具成本效益的访问层来优化存储成本,而不会影响性能或产生运营开销。S3 Intelligent-Tiering 是可实现以下目标的唯一一种云存储类:它通过在访问模式更改时在访问层之间的细粒度对象级别上移动数据,实现自动成本节约。如果您希望针对具有未知或不断变化的访问模式的数据优化存储成本,S3 Intelligent-Tiering 存储类非常适合。S3 Intelligent-Tiering 没有检索费用。

每月只需支付少量的对象监控和自动化费用,S3 Intelligent-Tiering 即可监控访问模式并自动将尚未访问的对象移动到成本较低的访问层。S3 Intelligent-Tiering 可利用三个低延迟和高吞吐量访问层自动节省存储成本。对于可以异步访问的数据,您可以选择激活 S3 Intelligent-Tiering 存储类中的自动存档功能。S3 Intelligent-Tiering 专为 99.9% 的可用性和 99.999999999% 的耐用性而设计。

S3 Intelligent-Tiering 会自动将对象存储在三个访问层:

  • 频繁访问 – 上载或转换到 S3 Intelligent-Tiering 的对象将自动存储在频繁访问层中。

  • 不频繁访问 – S3 Intelligent-Tiering 将连续 30 天未访问的对象移动到不频繁访问层。

  • 归档即时访问 – 使用 S3 Intelligent-Tiering,连续 90 天未访问的任何现有对象都会自动移动到归档即时访问层。

除了这三个层之外,S3 Intelligent-Tiering 还提供两个可选的归档访问层:

  • 归档访问 – S3 Intelligent-Tiering 为您提供了一个选项,可让您对可以异步访问的数据激活归档访问层。激活后,归档访问层会自动存档至少连续 90 天未访问的对象。

  • 深度归档访问 – S3 Intelligent-Tiering 为您提供了一个选项,可让您对可以异步访问的数据激活深度归档访问层。激活后,深度归档访问层会自动存档至少连续 180 天未访问的对象。

注意
  • 如果您想绕过归档即时访问层,则只激活 90 天的归档访问层。归档访问层提供了略低的存储成本,只需几分钟到一小时的检索时间。归档即时访问层提供毫秒级的访问和高吞吐量性能。

  • 仅当您的应用程序可以异步访问对象时,才激活归档访问和深层归档访问层。如果您正在检索的对象存储在归档访问层或深度归档访问层中,请首先使用 RestoreObject 还原对象。

您可以将新创建的数据移动到 S3 Intelligent-Tiering,并将其设置为默认存储类。您还可以使用 PutBucketIntelligentTieringConfiguration API 操作、Amazon CLI 或 Amazon S3 控制台,选择激活其中一个或这两个归档访问层。有关使用 S3 Intelligent-Tiering 和激活归档访问层的更多信息,请参阅 使用 S3 Intelligent-Tiering

要访问归档访问层或深度归档访问层中的对象,您首先需要将其还原。有关更多信息,请参阅 从 S3 Intelligent-Tiering 归档访问和深度归档访问层恢复对象

注意

如果对象大小小于 128 KB,未被监控,不符合自动分层条件。较小的对象始终存储在频繁访问层中。有关 S3 Intelligent-Tiering 的更多信息,请参阅S3 Intelligent-Tiering 访问层。

不经常访问对象的存储类

S3 Standard-IAS3 One Zone-IA 存储类用于长时间运行且不经常访问的数据。(IA 表示不经常访问。) S3 Standard-IA 和 S3 One Zone-IA 对象可用于毫秒级访问(类似于 S3 Standard存储类)。Amazon S3 会收取这些对象的检索费,因此,它们最适合不经常访问的数据。有关定价信息,请参阅 Amazon S3 定价

例如,您可以选择 S3 Standard-IA 和 S3 One Zone-IA 存储类执行以下操作:

  • 用于存储备份。

  • 用于不经常访问但仍需要毫秒级访问的旧数据。例如,上传数据时,您可能会选择 S3 Standard存储类,然后使用生命周期配置指示 Amazon S3 将对象转换为 S3 Standard-IA 或 S3 One Zone-IA 类。

    有关生命周期管理的更多信息,请参阅 管理存储生命周期

注意

S3 Standard-IA 和 S3 One Zone-IA 存储类适用于您计划存储至少 30 天并且大小超过 128 KB 的对象。如果对象小于 128 KB,Amazon S3 会收取 128 KB 的费用。如果您在 30 天的最短存储期结束前删除对象,则需支付 30 天的费用。在 30 天之前删除、覆盖或转换为其他存储类的对象将产生正常存储使用费,外加最低 30 天剩余时间的按比例收费。有关定价信息,请参阅 Amazon S3 定价

这些存储类在以下方面有所不同:

  • S3 Standard-IA – Amazon S3 跨多个地理位置独立的可用区以冗余方式存储对象数据(类似于 S3 Standard 存储类)。S3 Standard-IA 对象可在出现可用区丢失时复原。此存储类可提供比 S3 One Zone-IA 类更好的可用性和弹性。

  • S3 One Zone-IA – Amazon S3 只在一个可用区存储对象数据,因此比 S3 Standard-IA 更便宜。但是,数据无法灵活地应对由于地震和洪水灾害而造成可用区物理丢失的情况。S3 One Zone-IA 存储类和 S3 Standard-IA 一样具有持久性,但是可用性和弹性较差。有关存储类的持久性和可用性比较,请参阅此部分结尾的 比较 Amazon S3 存储类。有关定价信息,请参阅 Amazon S3 定价

我们建议执行下列操作:

  • S3 Standard-IA – 用于主数据或仅无法重新创建的数据副本。

  • S3 One Zone-IA – 如果在可用区出现故障时可重新创建数据,可在配置 S3 跨区域复制(CRR)时用于对象副本。

用于存档对象的存储类

S3 Glacier Instant RetrievalS3 Glacier Flexible RetrievalS3 Glacier Deep Archive 存储类专为低成本数据存档而设计。这些存储类提供与 S3 Standard 和 S3 Standard-IA 存储类相同的持久性和弹性。有关存储类持久性和可用性的比较,请参阅 比较 Amazon S3 存储类

这些存储类在以下方面有所不同:

  • S3 Glacier Instant Retrieval – 用于归档很少访问的、需要毫秒检索的数据。与 S3 Standard-IA 存储类相比,存储在 S3 Glacier 即时检索存储类中的数据可以节省成本,与 S3 Standard-IA 存储类相同的延迟和吞吐量性能。S3 Glacier 即时检索的数据访问成本高于 S3 Standard-IA。

    有关定价信息,请参阅 Amazon S3 定价

  • S3 Glacier Flexible Retrieval – 用于可能需要在几分钟内检索其部分数据的归档。存储在 S3 Glacier Flexible Retrieval 存储类中的数据的最短存储持续时间为 90 天,使用加速检索只需 1-5 分钟即可访问。检索时间很灵活,您可以在 5-12 小时内申请免费批量检索。如果您在 90 天的最短使用期限之前删除、覆盖对象或将其转换到不同的存储类,则您需支付 90 天的费用。对于 S3 Glacier Flexible Retrieval,Amazon S3 支持以每个 Amazon Web Services 账户每秒最多 1000 个事务的速率发出还原请求。

    有关定价信息,请参阅 Amazon S3 定价

  • S3 Glacier Deep Archive – 用于归档很少需要访问的数据。存储在 S3 Glacier Deep Archive 存储类中的数据的最短存储持续时间为 180 天,默认检索时间为 12 小时。如果您在 180 天的最短使用期限之前删除、覆盖对象或将其转换到不同的存储类,则您需支付 180 天的费用。对于 S3 Glacier Deep Archive,Amazon S3 支持以每个 Amazon Web Services 账户每秒最多 1000 个事务的速率发出还原请求。

    有关定价信息,请参阅 Amazon S3 定价

    S3 Glacier Deep Archive 是 Amazon 中成本最低的存储选项。S3 Glacier Deep Archive 的存储成本低于 S3 Glacier Flexible Retrieval 存储类。您可以使用批量检索来减少 S3 Glacier Deep Archive 检索成本,批量检索会在 48 小时内返回数据。

检索存档的对象

您可以按照与其他存储类相同的方式将对象的存储类设置为 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive,如 设置对象的存储类 部分所述。但是,S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 对象不可用于实时访问。您必须先还原 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 对象,然后才能访问它们。[S3 Standard、低冗余存储(RRS)、S3 Standard-IA、S3 One Zone-IA、S3 Glacier Instant Retrieval 和 S3 Intelligent-Tiering 对象可供随时访问。] 有关检索已存档对象的更多信息,请参阅 恢复已归档的对象

重要

如果选择 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类,您的对象将在 Amazon S3 中保留。您无法直接通过单独的 Amazon S3 Glacier 服务访问它们。

要了解有关 Amazon S3 Glacier 服务的更多信息,请参阅 Amazon S3 Glacier 开发人员指南

开始使用 S3 Glacier 存储类

要了解有关如何使用 Amazon S3 Glacier 存储类的更多信息,请参阅教程:开始使用 Amazon S3 Glacier 存储类

Amazon S3 on Outposts 的存储类

通过使用 Amazon S3 on Outposts,您可以在 Amazon Outposts 资源上创建 S3 存储桶,并在本地为需要本地数据访问、本地数据处理和数据驻留的应用程序存储和检索对象。您可以像在 Amazon S3 中一样在 Amazon Outposts 上使用相同的 API 操作和特征,包括访问策略、加密和标记。您可以通过 Amazon Web Services Management Console、Amazon CLI、Amazon SDK 或 REST API 使用 S3 on Outposts。

S3 on Outposts 提供了一个新的存储类 S3 Outposts (OUTPOSTS)。S3 Outposts 存储类仅可用于存储在 Outposts 上的存储桶中的对象。如果您尝试将此存储类与 Amazon Web Services 区域中的 S3 存储桶一起使用,则会出现 InvalidStorageClass 错误。此外,如果您尝试将其他 S3 存储类与存储在 S3 on Outposts 存储桶中的对象一起使用,则会出现相同的错误。

存储在 S3 Outposts (OUTPOSTS) 存储类中的对象始终使用具有 Amazon S3 托管式加密密钥的服务器端加密 (SSE-S3) 进行加密。有关更多信息,请参阅使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)

您还可以明确选择使用具有客户提供的加密密钥的服务器端加密 (SSE-C) 来加密存储在 S3 Outposts 存储类中的对象。有关更多信息,请参阅使用具有客户提供的密钥的服务器端加密(SSE-C)

注意

S3 on Outposts 不支持带 Amazon Key Management Service (Amazon KMS) 密钥的服务器端加密 (SSE-KMS)。

有关 S3 on Outposts 的更多信息,请参阅什么是 Amazon S3 on Outposts?

比较 Amazon S3 存储类

下表比较了存储类,包括其可用性、持久性、最短存储持续时间和其他注意事项。

存储类 设计专门针对 持久性 (设计目标) 可用性 (设计目标) 可用区 最小存储持续时间 最小可计费对象大小 其他考虑因素

S3 Standard

频繁访问的数据(每月超过一次),访问时间为毫秒级

99.999999999%

99.99%

>=3

S3 Standard-IA

毫秒级访问的历时长久、访问频率不高的数据(每月一次)

99.999999999%

99.9%

>=3

30 天

128 KB

按每 GB 收取检索费用。

S3 智能分层

访问模式未知、不断变化或不可预测的数据

99.999999999%

99.9%

>=3

按对象收取监控和自动化费用。无检索费用。

S3 One Zone-IA

毫秒级访问的可重建、访问频率不高的数据(每月一次)

99.999999999%

99.5%

1

30 天

128 KB

按每 GB 收取检索费用。无法灵活地应对可用区丢失的情况。

S3 Express One Zone

在单个 Amazon 可用区内,向延迟敏感型应用程序提供毫秒级的数据访问

99.999999999%

99.95%

1

S3 Express One Zone 对象存储在您选择的单个 Amazon 可用区内。

S3 Glacier 即时检索

历时长久的归档数据每季度访问一次,毫秒级访问 99.999999999%

99.9%

>=3

90 天

128 KB

按每 GB 收取检索费用。

S3 Glacier Flexible Retrieval

每年访问一次长期归档数据,检索时间为几分钟到几小时 99.999999999%

99.99% (在您还原对象之后)

>=3

90 天

不适用*

按每 GB 收取检索费用。您必须先还原存档对象,然后才可以访问它们。有关信息,请参阅 恢复已归档的对象

S3 Glacier Deep Archive

长期存在的归档数据每年访问不到一次,检索时间为数小时 99.999999999%

99.99% (在您还原对象之后)

>=3

180 天

不适用**

按每 GB 收取检索费用。您必须先还原存档对象,然后才可以访问它们。有关信息,请参阅 恢复已归档的对象

RRS(不推荐)

具有毫秒级访问的非关键、频繁访问的数据

99.99%

99.99%

>=3

* S3 Glacier Flexible Retrieval 要求为每个归档对象提供 40KB 的额外元数据。这包括以 S3 Glacier Flexible Retrieval 费率计费的 32KB 元数据(识别和检索您的数据所需),以及按 S3 Standard 费率计费的额外 8KB 数据。需要使用 S3 Standard 速率来维护归档到 S3 Glacier Flexible Retrieval 的对象的用户定义名称和元数据。有关存储类的更多信息,请参阅 Amazon S3 存储类

** S3 Glacier Deep Archive 要求为每个归档对象提供 40KB 的额外元数据。这包括以 S3 Glacier Deep Archive 费率计费的 32KB 元数据(识别和检索您的数据所需),以及按 S3 Standard 费率计费的额外 8KB 数据。需要使用 S3 Standard 速率来维护归档到 Amazon S3 Glacier Deep Archive 的对象的用户定义名称和元数据。有关存储类的更多信息,请参阅 Amazon S3 存储类

请注意,除了 S3 One Zone-IA 和 S3 Express One Zone 之外,所有的存储类都被设计为能够应对灾难导致的可用区的物理损失。除了应用场景的性能要求之外,还考虑了成本。有关存储类定价,请参阅 Amazon S3 定价

设置对象的存储类

要设置和更新对象存储类,您可以使用 Amazon S3 控制台、Amazon SDK 或 Amazon Command Line Interface(Amazon CLI)。所有这些方法都使用 Amazon S3 API 操作将请求发送到 Amazon S3。

Amazon S3 API 操作支持按照以下所示方式设置(或更新)对象的存储类:

  • 创建新对象时,可以指定其存储类。例如,使用 PUT ObjectPOST ObjectInitiate Multipart Upload API 操作时,添加 x-amz-storage-class 请求标头以指定存储类。如果您未添加此标头,Amazon S3 将使用默认的 S3 Standard 存储类。

  • 您还可以通过使用 PUT Object - Copy API 操作来复制对象,从而将已存储在 Amazon S3 中的对象的存储类更改为任何其他存储类。但是,您无法使用 PUT Object - Copy 来复制存储在 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类中的对象。您也无法从 S3 One Zone-IA 转换为 S3 Glacier 即时检索。

    通过使用相同的键名称并指定请求标头,可以复制同一个存储桶中的对象,如下所示:

    • x-amz-metadata-directive 标头设置为 COPY

    • x-amz-storage-class 标头设置为要使用的存储类。

    在启用版本控制的存储桶中,您无法更改特定版本对象的存储类。当您复制对象时,Amazon S3 将授予它一个新的版本 ID。

  • 如果对象大小小于 160GB,则可以使用 Amazon S3 控制台更改对象的存储类。如果更大,我们建议添加 S3 生命周期配置来更改对象的存储类。

  • 您可以通过向存储桶添加 S3 生命周期配置来指示 Amazon S3 更改对象的存储类。有关更多信息,请参阅 管理存储生命周期

  • 在设置复制配置时,您可以将已复制对象的存储类设置为其他任何存储类。但是,您无法复制存储在 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类中的对象。有关更多信息,请参阅 复制配置

将访问策略权限限制到特定存储类

在授予 Amazon S3 操作的访问策略权限时,您可以使用 s3:x-amz-storage-class 条件键限制存储上传的对象时使用的存储类。例如,授予 s3:PutObject 权限时,您可以将对象上载限制到特定的存储类。有关策略示例,请参阅示例 5:将对象上传限制为具有特定存储类的对象

有关在策略中使用条件的更多信息和 Amazon S3 条件键的完整列表,请参阅以下主题: