[英]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.