繁体   English   中英

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

[英]AWS S3 Glacier - Programmatically Initiate Restore

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

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

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

您也可以像这样使用AWS CLI工具 (这里我假设您要恢复一个目录中的所有文件)

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工具可能有更好的方法。

警告:小心超过分配的自由恢复量/周期的冰川恢复。 如果您过快地恢复过多数据,则收费会呈指数级增长。

我写了一些相似的东西。 我不能说任何PHP api,但是有一个简单的http POST可以启动冰川恢复

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

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

    if restore = headers['x-amz-restore']
      if restore.first =~ /ongoing-request="(.+?)", expiry-date="(.+?)"/
        restoring = $1 == "true"
        restore_date = DateTime.parse($2)
      elsif restore.first =~ /ongoing-request="(.+?)"/
        restoring = $1 == "true"
      end
    end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM