簡體   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