通过 Amazon S3 智能分层,您如何知道对象位于哪一层?

how*_*eng 5 amazon-s3 amazon-web-services aws-cli

https://docs.aws.amazon.com/AmazonS3/latest/userguide/archived-objects.html说:

当您将 Amazon S3 对象存档到 S3 Glacier 或 S3 Glacier Deep Archive 存储类时,或者将对象存档到 S3 智能分层存档访问层或深度存档访问层时,无法实时访问这些对象。

我明白这一点,但如何判断对象是否位于存档访问层或深度存档访问层?我已经阅读了大部分 AWS S3 文档,但似乎找不到此信息。我正在为 S3 编写一个 UI,并希望根据对象所在的层显示“下载”或“恢复”按钮。我刚刚开始对此进行开发,因此这些文件中没有任何文件还剩两层,我等不及 90 天才能把任何东西移到那里。

当您发出list-objects请求时,您将获得每个项目的存储类别,该存储类别返回为INTELLIGENT_TIERING,但它不会告诉您它是哪一层。

关于测试 S3 智能分层的评论说,您可以通过将存储类别更改为 Glacier 来伪造它,但我怀疑这是一个准确的测试,因为 Glacier 和智能分层是两种不同的存储类别,并且没有意义智能分层对象会突然改变它们的存储类别。

有人有任何见解吗?提前致谢。

亚马逊更新:(tl;博士,这是不可能的)

不幸的是,我们无法识别存储在智能分层类中的对象的访问层,这是通过识别对象的访问模式来确定对象的访问层的唯一方法。可以通过分析访问日志来识别访问模式,或者用户可以使用 S3 Storage Lens 查看访问模式。

根据您的要求,最好的选择是禁用智能分层存档配置。禁用此配置后,智能分层类中的对象将不会在“存档访问层”和“深度存档访问层”中移动。通过此配置,您可以在应用程序中创建一个逻辑,如果对象属于“智能分层”类,则将启用下载按钮,并且用户将能够下载该对象。

现在,要将对象移动到“Glacier”和“Glacier Deep Archive”,您可以配置生命周期规则。假设您可以配置生命周期规则,以在 90 天后将“智能分层”类中的对象转换为 Glacier,并在 180 天后将对象转换为“Glacier Deep Archive”。

通过这种方式,使用 ListObjects API 调用,您可以识别对象的正确存储类别,并且可以编写一个逻辑,其中仅当存储类别为“Glacier”或“Glacier Deep Archive”时才会启用“恢复”按钮。3-5 小时后,系统会适当地向用户显示一条消息,要求用户下载该对象。

jes*_*AWS 5

@how Cheng 您可以使用S3 Inventory获取所有对象及其相应元数据的列表,包括 S3 智能分层访问层(频繁、不频繁、存档、深度存档)。Amazon S3 Inventory 提供 CSV、ORC 或 Parquet 输出文件,这些文件每天或每周列出 S3 存储桶或共享前缀的对象及其相应元数据。您还可以对对象发出HEAD 请求以报告 S3 智能分层存档访问层。


gre*_*van 5

来自官方文档

您还可以使用 HEAD 对象请求来查看对象的存档状态。如果对象使用 S3 智能分层存储类存储并且位于某一归档层中,则 HEAD 对象响应将显示当前归档层。它使用 x-amz-archive-status标头来执行此操作。

例子:

HTTP/1.1 200 OK
x-amz-id-2: FSVaTMjrmBp3Izs1NnwBZeu7M19iI8UbxMbi0A8AirHANJBo+hEftBuiESACOMJp
x-amz-request-id: E5CEFCB143EB505A
Date: Fri, 13 Nov 2020 00:28:38 GMT
Last-Modified: Mon, 15 Oct 2012 21:58:07 GMT
ETag: "1accb31fcf202eba0c0f41fa2f09b4d7"
x-amz-storage-class: 'INTELLIGENT_TIERING'
x-amz-archive-status: 'ARCHIVE_ACCESS'
x-amz-restore: 'ongoing-request="true"'
x-amz-restore-request-date: 'Fri, 13 Nov 2020 00:20:00 GMT'
Accept-Ranges: bytes
Content-Type: binary/octet-stream
Content-Length: 300
Server: AmazonS3
Run Code Online (Sandbox Code Playgroud)