中階閱讀時間 3 分鐘

DynamoDB 備份與時間點還原(PITR)完整指南

DynamoDB 以兩種方式保護你的資料。隨需備份是你自己 擷取並可無限期保留的完整快照。時間點還原(PITR)是持續、 自動的備份,讓你把表格還原到一個滾動視窗內的任何一秒。兩者都還原到一個_新_表格——它們是復原工具,不是一顆復原按鈕。

對稽核日誌而言這是不可妥協的。它是一份不可變的合規紀錄;一次 改寫事件的糟糕遷移,或一次意外的大量刪除,都必須能 還原到犯錯前的那一刻。

DynamoDB 備份與時間點還原如何運作?

DynamoDB 提供兩種備份類型。時間點還原(PITR)擷取持續的自動備份,讓你還原到一個可設定的 1 到 35 天視窗內的任何一秒。隨需備份是無限期保留的手動完整快照。兩者都還原到一個新表格,絕不覆蓋原始表格,所以它們是復原工具,而不是就地的復原。

  • PITR = 持續備份,還原到任何一秒,在一個可設定的 1 到 35 天視窗內(它以前是固定的 35 天)。
  • 隨需備份 = 手動的完整快照,愛保留多久就多久, 獨立於 PITR 的視窗。
  • 還原會建立一個新表格。 你還原到一個新名字,然後切換—— 原始表格不受影響。
  • PITR 依表格大小計價,而非依還原點的數量——用 DynamoDB 定價計算機 估算它。

問題:一個你無法就地復原的錯誤

DynamoDB 沒有可供你回滾的交易日誌,也沒有對一次寫入的「復原」。如果一次 遷移指令稿改寫了每個事件的 action 欄位,或有人執行了一次 比預期更廣的刪除,表格就只是處於錯誤的狀態。沒有 備份,資料就沒了。

對一份稽核日誌而言——它的全部價值就在於做一份值得信賴的紀錄——「我們拿不回 上週二的事件」是一次合規失敗,而不只是一個不便。

備份與 PITR 如何運作

時間點還原一旦啟用,就會擷取持續的自動備份。依 AWS 文件, PITR 為你提供完全受管、具每秒還原粒度的表格資料持續 備份。這個視窗可透過 RecoveryPeriodInDays 設定為 1 到 35 天,而你可以還原到其中的任何一秒——直到大約落後於實際時間五分鐘 (LatestRestorableDateTime)——也包括還原到一個不同的 region

一個重要的邊角:縮短復原期會立即降低 最早的還原點,而停用再重新啟用 PITR 會重設 可還原的起始時間——你會失去先前的持續歷史。

PITR 也把關受管的匯出到 S3:該匯出讀取的是 同一份持續備份,因此在 PITR 關閉時,ExportTableToPointInTime 會以 PointInTimeRecoveryUnavailableException 失敗。

隨需備份是分開的:手動、整表的快照,你明確地 建立並無限期保留,適合作為遷移前的檢查點,或 一份超出 35 天 PITR 視窗的長期合規封存。請求會被立即處理, 備份在幾分鐘內就可供還原,不會消耗表格的任何輸送量,而且你 保留幾份都沒有上限。文件裡有一個誠實的但書:隨需備份並不保證 跨項目的因果一致性——各次更新之間的偏差「usually much less than a second」,但一份在寫入尖峰中途取得的備份,並不是一個單一的 凍結瞬間。

還原不會帶回來的東西

一次還原重建的是表格的資料與它的索引——而不是它的維運接線。根據 AWS 文件, 你必須在還原後的表格上手動重新設定:自動調整規模政策、 IAM 政策、CloudWatch 指標與警報、標籤、串流設定、TTL、 刪除保護,以及 PITR 本身。從備份還原卻忘了重新啟用 PITR, 正是下一次事故變成無法復原的原因。

在還原時,你可以刻意變更某些設定——計費模式、佈建容量、 加密金鑰——而且你可以排除部分或全部次要索引,只要你之後有辦法 重建它們,這會讓還原更快也更便宜。還原也可以指向不同的區域, 而且一次還原永遠不會覆蓋既有的表格。

用 AWS Backup 做排程備份

DynamoDB 自己的隨需備份沒有排程器。若要有保留期的週期性備份, DynamoDB 與 AWS Backup 有原生整合 (AWS 文件): 備份計畫給你帶生命週期規則的排程備份(包含冷儲存分層)、 為災難復原自動進行的跨帳戶與跨區域複製、透過備份保存庫使用的一把 獨立 KMS 金鑰,以及提供 WORM 合規態勢、誰都無法悄悄刪除的 Vault Lock。 兩個維運上的陷阱:AWS Backup 必須逐帳戶、逐區域明確選擇加入, 而它建立的備份(類型 AWS_BACKUP)無法從 DynamoDB 主控台刪除—— 請改在 AWS Backup 中管理它們。

兩者都還原到一個新表格,而非覆蓋既有的:

PITR 還原到 T-5 分鐘驗證後再切換audit-log(已損毀)audit-log-restored(新表格)應用程式指向還原後的表格

一個實作範例:從一次糟糕的遷移中復原

一次原本要新增一個 expiresAt 屬性的遷移,反而以一個空字串 覆寫了每個事件上的 action。PITR 開著、視窗為 35 天,所以你還原 到遷移執行_之前_的那一秒:

stepresult
restore PITR to 09:59:00new table audit-log-restored with correct actions
diff against liveconfirm only the migration's rows differ
cut app over to restoredoriginal left intact for forensics

被破壞的表格在你驗證還原時保持不動——你把 還原後的事件與即時的事件比對、確認 action 值回來了,然後 重新指向應用程式。復原本身沒有摧毀任何東西。

如果損失的是少數幾個項目而非整表的損壞,你可以 改為檢視即時資料與還原後的副本,只把受影響的資料列複製 過去——參見 複製一個 DynamoDB 表格

在 DynoTable 中操作

一次還原的好壞,取決於你對它的驗證。在還原到 audit-log-restored 之後,你需要實際查看那些復原的事件,並確認 它們與犯錯前應有的樣子相符。

DynoTable 會像連上任何其他表格一樣連上還原後的表格,所以你可以查詢 受影響租戶的事件、確認 action 值是正確的,並在切換之前與 即時表格比對——把一次還原從一次信仰之躍變成一次已驗證的復原。

在 DynoTable 中檢視一個 PITR 還原後的 audit-log 表格,於切換應用程式之前驗證那些復原的事件。
在 DynoTable 中檢視一個 PITR 還原後的 audit-log 表格,於切換應用程式之前驗證那些復原的事件。

你也可以匯出那些復原的事件,作為一份離線的合規紀錄——參見 把 DynamoDB 匯出到 CSV

陷阱與後續步驟

  • 在你需要它_之前_就啟用 PITR。 它只從開啟的那一刻起保護—— 沒有追溯性的復原。為任何你損失不起其資料的表格開啟它。
  • 停用 PITR 會重設視窗。 把它切掉再切回來會抹掉那份 持續歷史;可還原的起始時間會從重新啟用時重新開始。
  • 還原既不即時也不免費。 一次還原會佈建一整個新表格,並 花費與大小成正比的時間;為那段時長與那個額外的表格編列預算。
  • 35 天不是封存。 若要超出 PITR 視窗的保留,就擷取隨需 備份或匯出到 S3——PITR 是一個復原視窗,不是長期儲存。

那就闔上了稽核日誌的操作環路:交易保一致性、Streams 供反應、TTL 供過期、對的容量模式保成本、global tables 供 region 韌性,而 PITR 供資料復原。回顧 操作與成本總覽,看看它們如何拼在一起。

下載 DynoTable,連上一個還原後的表格,在你信任你的 復原之前先驗證它。

已更新