Pet*_*ott 5 amazon-s3 amazon-web-services amazon-glacier
我有大约50Gb的文件存储在S3中。昨天,我愚蠢地添加了一个生命周期规则,以将已存在30天以上的文件从S3传输到Glacier,却没有意识到这将禁用到原始文件的公共链接。
实际上,我确实需要这些文件保留在S3中,因为它们是在我们网站上链接的图像和图纸。
我已要求从Glacier恢复文件,但是据我了解,这限制了文件在返回Glacier之前可使用的天数。
我当时想我将不得不创建一个新的存储桶,然后将文件复制到该存储桶,然后将该新存储桶链接到我的网站。
我的问题:
我想知道是否有一种方法可以不必将文件复制到新存储桶?
如果我只是在S3中返回文件后更改文件的存储类,这会阻止它返回Glacier吗?
如果我必须将文件复制到新的存储桶中,则假定这些副本不会随机返回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副本将被删除。
为了提供完整的答案,我结合了另外两个 SO 帖子:
第一步暂时恢复一切:
获取存储桶中所有 GLACIER 文件(密钥)的列表(如果您确定所有文件都在 Glacier 中,则可以跳过此步骤)。
aws s3api list-objects-v2 --bucket <bucketName> --query "Contents[?StorageClass=='GLACIER']" --output text | awk -F '\t' '{print $2}' > glacier-restore.txt
创建一个 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在此处的评论。
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |