Tyl*_*erW 37 amazon-s3 amazon-web-services amazon-glacier
我在Amazon S3上更改了一堆我的存储桶的生命周期,因此他们的存储类设置为Glacier.我是使用在线AWS控制台完成的.我现在再次需要这些文件.
我知道如何将它们恢复到每个文件的S3.但我的桶有数千个文件.我想看看是否有办法将整个桶恢复到S3,就像有办法将整个桶送到Glacier一样?
我猜有一种编程解决方案的方法.但我想知道是否有办法在控制台中执行此操作.还是用另一个程序?或者其他我可能会失踪的东西?
Nat*_*Fox 59
如果您使用,s3cmd您可以使用它轻松地递归恢复:
s3cmd restore --recursive s3://mybucketname/
Run Code Online (Sandbox Code Playgroud)
我也用它来恢复文件夹:
s3cmd restore --recursive s3://mybucketname/folder/
Run Code Online (Sandbox Code Playgroud)
小智 33
如果您正在使用AWS CLI工具(这很好,您应该),您可以这样做:
aws s3 ls s3://<bucket_name> | awk '{print $4}' | xargs -L 1 aws s3api restore-object --restore-request Days=<days> --bucket <bucket_name> --key
Run Code Online (Sandbox Code Playgroud)
替换<bucket_name>为您想要的存储桶名称.
替换<days>为要还原对象的天数.
Dom*_* D. 14
上面的答案对我来说效果不好,因为我的水桶与冰川上的物体混合在一起,有些则没有.对我来说最简单的事情是创建存储桶中所有 GLACIER对象的列表,然后尝试单独还原每个对象,忽略任何错误(如已在进行中,而不是对象等).
获取存储桶中所有GLACIER文件(密钥)的列表
aws s3api list-objects-v2 --bucket <bucketName> --query "Contents[?StorageClass=='GLACIER']" --output text | awk '{print $2}' > glacier-restore.txt
创建一个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
Run Code Online (Sandbox Code Playgroud)幸得乔希在http://capnjosh.com/blog/a-client-error-invalidobjectstate-occurred-when-calling-the-copyobject-operation-operation-is-not-valid-for-the-source-objects -storage-class /,我在尝试上述一些解决方案后找到的资源.
Mic*_*bot 11
没有内置工具.S3中的"文件夹"是人类方便的幻觉,基于对象键(路径/文件名)中的正斜杠,迁移到冰川的每个对象都必须单独恢复,尽管......
当然,您可以编写一个脚本来遍历层次结构,并使用您选择的编程语言中的SDK或REST API发送这些恢复请求.
在继续之前,请务必了解从冰川恢复到S3的工作原理.它始终只是一个临时恢复,您可以选择每个对象在S3中保留的天数,然后再恢复为仅存储在冰川中.
此外,您希望确定您了解在短时间内恢复过多冰川数据的罚款,或者您可能会花费一些意外费用.根据紧急程度,您可能希望在几天或几周内将恢复操作分散开来.
我最近需要还原整个存储桶及其所有文件和文件夹。您将需要使用凭据配置的s3cmd和aws cli工具来运行此工具。
我发现这非常强大,可以处理可能已经有还原请求的存储桶中特定对象的错误。
#!/bin/sh
# This will give you a nice list of all objects in the bucket with the bucket name stripped out
s3cmd ls -r s3://<your-bucket-name> | awk '{print $4}' | sed 's#s3://<your-bucket-name>/##' > glacier-restore.txt
for x in `cat glacier-restore.txt`
do
echo "restoring $x"
aws s3api restore-object --restore-request Days=7 --bucket <your-bucket-name> --profile <your-aws-credentials-profile> --key "$x"
done
Run Code Online (Sandbox Code Playgroud)
这是我的界面版本aws cli以及如何从冰川恢复数据。我修改了上面的一些示例,以便在要恢复的文件的密钥包含空格时起作用。
# Parameters
BUCKET="my-bucket" # the bucket you want to restore, no s3:// no slashes
BPATH="path/in/bucket/" # the objects prefix you wish to restore (mind the `/`)
DAYS=1 # For how many days you wish to restore the data.
# Restore the objects
aws s3 ls s3://${BUCKET}/${BPATH} --recursive | \
awk '{out=""; for(i=4;i<=NF;i++){out=out" "$i}; print out}'| \
xargs -I {} aws s3api restore-object --restore-request Days=${DAYS} \
--bucket ${BUCKET} --key "{}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27158 次 |
| 最近记录: |