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