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

Pet*_*ott 5 amazon-s3 amazon-web-services amazon-glacier

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

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

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

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

我的问题:

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

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

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

我是S3的新手(您可能会因我的骨头错误而知道),所以请尝试保持温柔

RaG*_*aGe 10

你不需要一个新的桶。您从 Glacier(临时)恢复对象,然后使用 COPY 操作覆盖它们,这实际上创建了新对象并且它们将保留。不用说,您需要禁用从老化到冰川的生命周期。

临时恢复:

aws s3api restore-object --restore-request Days=7 --bucket <bucketName> --key <keyName>
Run Code Online (Sandbox Code Playgroud)

替换为复制的对象:

aws s3 cp s3://bucketName/keyName s3://bucketName/keyName --force-glacier-transfer --storage-class STANDARD
Run Code Online (Sandbox Code Playgroud)

文档说:

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

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

参考

...回到冰川

有点迂腐,存档的对象不会在 s3 和 Glacier 之间移动,它们永久在 Glacier 中,并且在 S3 中制作临时副本 - 重要的是要注意,当您临时恢复时,您需要为 Glacier 和 s3 付费他们。一旦您的保留期到期,S3副本将被删除。

  • 谢谢,我现在明白这是如何工作得更好了。最后,我需要使用命令 `aws s3 cp s3://mybucket s3://mybucket --force-glacier-transfer --storage-class STANDARD --recursive` 来制作我的副本。 (6认同)

Dav*_*vid 6

为了提供完整的答案,我结合了另外两个 SO 帖子:

第一步暂时恢复一切:

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

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

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

    #!/bin/sh
    
    IFS=$'\n'
    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
    
    Run Code Online (Sandbox Code Playgroud)

信用乔希和@domenic-d。

永久还原的第二步:

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

完成并完成。

归功于@pete-dermott在此处的评论。