永久性地将Glacier恢复为S3

Arm*_*man 21 amazon-s3 amazon-glacier

我想知道是否有一种简单的方法可以将Glacier对象永久恢复到S3.在恢复到S3时,您似乎可以恢复Glacier对象一段时间.因此,例如,我们现在有数千个文件已恢复到S3,这些文件将在90天内返回Glacier,但我们不希望它们返回Glacier.

Mic*_*bot 31

为了澄清一点上的技术性,你的文件将不会在90天内"返回"Glacier - 因为它们仍在Glacier中,但是由于你已经完成了恢复,因此存在S3中的临时副本减少了冗余存储(RRS) )S3将在90天内删除(或者在执行还原操作时指定的任何日期值.恢复文件不会删除Glacier副本.

你的问题的答案是否定的,是的.

从技术上讲,您无法将对象从Glacier存储类更改回标准或RRS类...

对象到GLACIER存储类的转换是单向的.您不能使用生命周期配置规则将对象的存储类从GLACIER转换为Standard或RRS.

......但是......

如果要将已存档对象的存储类更改为Standard或RRS,则必须先使用还原操作来创建临时副本.然后使用复制操作将对象覆盖为标准或RRS对象.

http://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html

您可以将该对象复制到技术上是一个新对象,但是与新对象具有相同键(路径)的对象...所以出于实际目的,是的,您可以.

PUT/COPY行动将在此处讨论:http: //docs.aws.amazon.com/AmazonS3/latest/dev/ChgStoClsOfObj.html


Col*_*wll 5

首先,从 Glacier 恢复(就像您所做的那样)。这使得该文件可用,以便您可以复制它。

然后,文件可用后,您可以使用 AWS CLI 复制/覆盖它:

aws s3 cp --metadata-directive "COPY" --storage-class "STANDARD" s3://my-bucket/my-image.png s3://my-bucket/my-image.png
Run Code Online (Sandbox Code Playgroud)

笔记

在上面的命令中:

  • from文件to路径是相同的(我们正在覆盖它)。
  • 我们正在设置--metadata-directive "COPY"。这告诉您cp将元数据与文件内容一起复制(此处的文档)。
  • 我们正在设置--storage-class "STANDARD". 这告诉我们对新文件cp使用s3 存储类别(文档位于此处)。STANDARD
  • 结果是一个新文件,这将更新修改日期。
  • 如果您正在使用版本控制,则可能需要考虑其他注意事项。

此过程基于此处AWS 文档中的信息。


大部分

如果您想批量执行此操作(多个文件/对象),可以使用以下命令:

试运行

此命令将列出传递的存储桶和前缀处的 Glacier 文件:

aws s3api list-objects --bucket my-bucket --prefix some/path --query 'Contents[?StorageClass==`GLACIER`][Key]' --output text | xargs -I {} echo 'Would be copying {} to {}'
Run Code Online (Sandbox Code Playgroud)

批量升级

一旦您对要升级的文件列表感到满意,请运行以下命令来升级它们。

运行之前,请确保存储桶和前缀与您在试运行中使用的内容匹配。另请确保您已对所有文件运行标准 S3/Glacier“恢复”操作(如上所述)。

这将单个文件/对象升级命令与试运行中的 list-objects 命令结合起来,使用xargs.

aws s3api list-objects --bucket my-bucket --prefix some/path --query 'Contents[?StorageClass==`GLACIER`][Key]' --output text | xargs -I {} aws s3 cp --metadata-directive "COPY" --storage-class "STANDARD" s3://adplugg/{} s3://adplugg/{}
Run Code Online (Sandbox Code Playgroud)