首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用亚马逊S3智能分层,您如何知道对象在哪一层?

使用亚马逊S3智能分层,您如何知道对象在哪一层?
EN

Stack Overflow用户
提问于 2021-06-17 22:54:00
回答 5查看 1.8K关注 0票数 3

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

当您将亚马逊S3对象存档到S3冰川或S3冰川深度存档存储类时,或者当对象被存档到S3智能分层存档访问层或深度存档访问层时,这些对象无法实时访问。

我理解这一点,但是您如何知道一个对象是在Archive Access还是Deep访问层中?我已经阅读了很多AWS S3文档,似乎找不到这些信息。我正在为S3编写一个UI,并希望根据对象所在的层显示“下载”或“恢复”按钮。我刚刚开始对此进行开发,所以在这两层中还没有任何文件,我不能等90天才能将任何东西移到那里。

当您执行list-objects请求时,您将得到每个项的存储类,它返回为INTELLIGENT_TIERING,但它并不告诉您它是哪一层。

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

有人有洞察力吗?提前谢谢。

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

不幸的是,我们无法识别存储在智能分层类中的对象的访问层,这是通过标识对象的访问模式来确定对象访问层的唯一方法。可以通过分析AccessLogs来识别访问模式,或者用户可以使用S3存储透镜查看访问模式。 根据您的要求,您最好的选择是保持智能分层档案配置禁用。如果禁用此配置,智能分层类中的对象将不会在“存档访问层”和“深度存档访问层”中移动。使用此配置,您可以在应用程序中创建一个逻辑,如果对象在“智能层”类中,则将启用“下载”按钮,用户将能够下载该对象。 现在,对于将对象移动到"Glacier“和”“,可以配置一个生命周期规则。假设您可以在90天后将生命周期规则配置为将“智能分层”类中的对象转换为冰川,180天后将其配置为“冰川深度存档”。 通过这种方式,您可以使用ListObjects API调用来标识对象的正确存储类,并且可以编程一个逻辑,其中只有当存储类为"Glacier“或”“时才启用”还原“按钮。适当地,一条消息将显示给用户,以便在3-5小时后下载该对象.

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-08-11 04:53:04

@how城您可以使用S3库存获取所有对象及其相应元数据的列表,包括S3智能分层访问层(频繁、罕见、存档、深度存档)。亚马逊S3库存提供CSV、ORC或Parquet输出文件,这些文件每天或每周列出对象及其对应的元数据,用于S3桶或共享前缀。您还可以在对象上创建一个头请求来报告S3智能分层归档访问层。

票数 4
EN

Stack Overflow用户

发布于 2021-06-24 16:21:29

在经过了AWS的反复支持之后,我找到了一个可行的解决方案。对于桶中的每一项,我可以执行一个GetObject请求并请求一个小字节范围(比如10个字节),所以这几乎等同于执行一个HeadObject请求。如果文件位于Archive或Deep访问层中,那么AWS将返回一个异常:

代码语言:javascript
复制
HTTP/1.1 403 Forbidden
x-amz-request-id: 43XTDH6Q7E9F2N5J
x-amz-id-2: 3Fn/qzcZwOxaCg1LLDsczSXF7stl7sbOwwDR1ajHIc+guZgxAfFHm1WfRoXWEsFLWPJzKt9Ynaw=
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Wed, 23 Jun 2021 16:36:24 GMT
Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>InvalidObjectState</Code>
  <Message>The operation is not valid for the object's access tier</Message>
  <StorageClass>INTELLIGENT_TIERING</StorageClass>
  <RequestId>43XTDH6Q7E9F2N5J</RequestId>
  <HostId>3Fn/qzcZwOxaCg1LLDsczSXF7stl7sbOwwDR1ajHIc+guZgxAfFHm1WfRoXWEsFLWPJzKt9Ynaw=</HostId>
</Error>

因此,根据请求是否成功,我可以确定是显示项目的“下载”按钮还是“恢复”按钮。

票数 2
EN

Stack Overflow用户

发布于 2022-02-03 05:39:47

来自官方的文档

您还可以使用HEAD对象请求查看对象的存档状态。如果一个对象使用S3智能分层存储类存储,并且位于其中一个存档层中,则HEAD对象响应将显示当前存档层。它使用x-amz-archive-status头来完成这个任务。

示例:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68027379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档