如何将AWS Glacier永久还原到S3?

时间:2018-08-03 10:05:11

标签: amazon-web-services amazon-s3 amazon-glacier

我有大约50Gb的文件存储在S3中。昨天我愚蠢地添加了一个生命周期规则,以将30天以上的文件从S3传输到Glacier,却没有意识到这会禁用到原始文件的公共链接。

实际上,我确实需要这些文件保留在S3中,因为它们是在我们网站上链接的图像和图纸。

我已请求从Glacier恢复文件,但是据我了解,这限制了文件在返回Glacier之前可以使用的天数。

我当时想我必须创建一个新的存储桶,然后将文件复制到该存储桶,然后将该新存储桶链接到我的网站。

我的问题:

  1. 我想知道是否有一种方法可以不必将文件复制到新存储桶?

  2. 如果我只是在S3中返回文件后更改文件的存储类,这会阻止它返回Glacier吗?

  3. 如果必须将文件复制到新存储桶中,我假设这些副本不会随机返回Glacier吗?

我对S3还是很陌生(您可能会因为我的骨头错误而知道),所以请尝试保持柔和

3 个答案:

答案 0 :(得分:3)

您不需要新的存储桶。您可以从冰川(暂时)还原对象,然后使用COPY操作覆盖它们,这实际上会创建新对象,并且它们会一直存在。不用说,您将需要禁用冰川的寿命周期。

临时还原:

aws s3api restore-object --restore-request Days=7 --bucket <bucketName> --key <keyName>

替换为复制的对象:

aws s3 cp s3://bucketName/keyName s3://bucketName/keyName --force-glacier-transfer --storage-class STANDARD

医生说:

  

从对象到GLACIER存储类的转换是单向的。

     

您不能使用生命周期配置规则将对象的存储类从GLACIER转换为STANDARD或REDUCED_REDUNDANCY。 如果要将存档对象的存储类别更改为STANDARD或REDUCED_REDUNDANCY,则必须首先使用restore操作进行临时复制。然后使用复制操作将该对象覆盖为STANDARD,STANDARD_IA,ONEZONE_IA或REDUCED_REDUNDANCY对象。

Ref.

  

...回到冰川

暂时,它们在s3和冰川之间不是移动,它们永久存在于冰川中,并且临时副本是在S3中制作的-重要的是要注意暂时恢复冰川和s3时需同时付款。保留期到期后,将删除S3个副本

答案 1 :(得分:1)

为了提供完整的答案,我将另外两个SO帖子组合在一起:

第一步临时还原所有内容

  1. 获取存储桶中所有GLACIER文件(密钥)的列表(如果您确定所有文件都在Glacier中,则可以跳过此步骤)。

    aws s3api list-objects-v2 --bucket <bucketName> --query "Contents[?StorageClass=='GLACIER']" --output text | awk '{print $2}' > glacier-restore.txt

  2. 创建一个shell脚本并运行它,替换您的“ bucketName”。

    #!/bin/sh
    
    for x in `cat glacier-restore.txt`
      do
        echo "Begin restoring $x"
        aws s3api restore-object --restore-request Days=7 --bucket <bucketName> --key "$x"
        echo "Done restoring $x"
      done
    

贷方Josh@domenic-d

永久还原的第二步

aws s3 cp s3://mybucket s3://mybucket --force-glacier-transfer --storage-class

完成并完成。

@ pete-dermott的评论here

答案 2 :(得分:1)

我使用以下命令从Amazon Glacier存储类还原S3对象:

aws s3api restore-object --bucket bucket_name --key dir1/sample.obj --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Standard"}}'

在还原请求中指定的持续时间内(例如,上述命令中使用的25天),可以使用该对象的临时副本。

如果示例中使用的JSON语法在Windows客户端上导致错误,请使用以下语法替换还原请求:

--restore-request Days=25,GlacierJobParameters={"Tier"="Standard"}

注意:这只会在指定的持续时间内创建对象的临时副本。您必须利用复制操作将对象覆盖为标准对象。

要将对象的存储类更改为Amazon S3 Standard,请使用以下命令:

aws s3 cp s3://bucket_name/dir1 s3://bucket_name/dir1 --storage-class STANDARD --recursive --force-glacier-transfer

这将使用Amazon S3 Standard存储类递归地复制和覆盖现有对象。