AWS S3 Glacier - 以编程方式启动还原

时间:2013-09-24 16:53:07

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

我一直在使用s3编写一个web应用程序用于存储和冰川备份。所以我设置了生命周期策略来存档它。现在我想编写一个列出已归档文件的webapp,用户应该能够从中恢复,然后在恢复完成后收到电子邮件。

现在我遇到的麻烦是我找不到我可以发出启动恢复的php sdk命令。如果它在恢复完成时通知SNS会很好,SNS会将JSON推送到SQS并且我会轮询SQS并最终在轮询检测到完全恢复时通过电子邮件发送给用户。

任何帮助或建议都会很好。 感谢。

2 个答案:

答案 0 :(得分:8)

你也可以像{em>那样使用AWS CLI tool(这里我假设你要恢复一个目录中的所有文件):

aws s3 ls s3://myBucket/myDir/ | awk '{if ($4) print $4}' > myFiles.txt
for x in `cat myFiles.txt`
do
    echo "restoring $x"
    aws s3api restore-object \
        --bucket myBucket \
        --key "myDir/$x" \
        --restore-request '{"Days":30}'
done

关于您的通知需求,CLI工具将报告“发生了客户端错误(RestoreAlreadyInProgress):如果请求已经启动,则对象还原已在进行中”,并且一旦恢复,可能会显示不同的消息。您可以多次运行此restore命令,查找“restore done”错误/消息。当然很漂亮;使用AWS CLI工具可能有更好的方法。

警告:请注意超过分配的免费恢复金额/期限的冰川恢复。如果您过快地恢复过多的数据,收费会呈指数级增长。

答案 1 :(得分:2)

我写了一些相似的东西。我不能说任何PHP api,但是有一个简单的http POST that kicks off glacier restoration

由于这种情况发生异步(并且最多需要5个小时),您必须设置一个进程来轮询正在通过对该对象发出HEAD个请求进行恢复的文件,该对象将具有{的恢复状态信息{1}}标题。

如果有帮助,我解析此标题的ruby代码如下所示:

x-amz-restore