我該如何排解從 S3 還原 ElastiCache 叢集的問題?

3 分的閱讀內容
0

從 Amazon Simple Storage Service (Amazon S3) 還原 Amazon ElastiCache for Redis 備份時,叢集建立會失敗。我收到 "Create-failed" (建立失敗) 或 "Permission denied" (許可遭拒) 的錯誤訊息。我該如何對此錯誤進行疑難排解?

簡短描述

以下是從 Amazon S3 還原 ElastiCache 備份失敗的常見原因:

  • 您正嘗試在備份限制之外還原備份。
  • ElastiCache 無法從 Amazon S3 擷取檔案。
  • ElastiCache 備份檔案位於另一個區域的 Amazon S3 儲存貯體中。
  • 您要將包含多個資料庫的 .rdb 檔案還原至 ElastiCache (已啟用叢集模式) 叢集。

解決方案

您正嘗試在備份限制之外還原備份

還原 ElastiCache for Redis 備份時,請務必注意下列的備份限制

  • 您無法從使用 Redis (已啟用叢集模式) 叢集建立的備份還原至 Redis (已停用叢集模式) 叢集。
  • 還原從 ElastiCache (已啟用叢集模式) 叢集建立的備份時,您無法在 ElastiCache 主控台中選取已停用叢集模式的選項。只有已啟用叢集模式的選項可用。
  • 將 ElastiCache (已啟用叢集模式) 叢集備份匯出到 Amazon S3 時,會建立多個 .rdb 檔案 (每個碎片各一個)。如果您嘗試從 Amazon S3 植入備份,您只能參照一個備份 (.rdb)。這會導致植入單個碎片的金鑰。若您試圖加入萬用字元來規避這種情況,會導致以下錯誤:
    錯誤:S3 物件的物件或儲存貯體不存在:examplebucket/cluster-mode-enabled-*.rdb
  • 您無法從使用資料分層的叢集還原備份。例如,您無法將 r6gd 節點還原到未使用資料分層的叢集中,例如 r6g 節點。
  • 如果 .rdb 檔案參照多個資料庫,您無法從 Redis (已停用叢集模式) 叢集還原至 Redis (已啟用叢集模式) 叢集。嘗試這麼做會導致以下錯誤:
    錯誤:若要在叢集模式下還原快照,RDB 檔案中的所有金鑰都應位於 DB 0 中

ElastiCache 無法從 Amazon S3 擷取檔案

當 ElastiCache 沒有存取 S3 儲存貯體中存放的 ElastiCache 備份的必要許可時,就會發生此錯誤。您可以檢閱 ElastiCache Events 來確認權限問題。

下列的 ElastiCache Events 範例顯示 Redis 複寫群組 "test" 建立失敗,因為 ElastiCache 無法從 S3 擷取備份檔案:

Restore from snapshot failed for node group 0001 in replication group test. Failed to retrieve file from S3

在您判斷錯誤的原因是 ElastiCache 無法從 Amazon S3 擷取檔案後,請確認您的區域為下列其一:

選擇加入的區域需要儲存貯體政策,才能允許 ElastiCache 從 Amazon S3 擷取備份檔案。

如果 S3 儲存貯體位於下列其中一個區域,您必須允許 ElastiCache 服務存取 S3 中的備份檔案

  • 中國 (北京) 和中國 (寧夏)
  • AWS GovCloud (美國西部)
  • 預設區域

**注意:**中國 (北京)、中國 (寧夏) 和 AWS GovCloud (美國西部) 區域的標準 ID 與預設 AWS 區域不同:

中國 (北京) 和中國 (寧夏)

Canonical ID: b14d6a125bdf69854ed8ef2e71d8a20b7c490f252229b806e514966e490b8d83

AWS GovCloud (美國西部) 區域

Canonical ID: 40fa568277ad703bd160f66ae4f83fc9dfdfd06c2f1b5060ca22442ac3ef8be6

AWS 預設區域

Canonical ID: 540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353

使用標準 ID 或儲存貯體政策授予對 Amazon S3 中 .rdb 備份物件的 ElastiCache 存取權後,請還原 Redis 叢集

ElastiCache 備份檔案位於另一個區域的 Amazon S3 儲存貯體

下列錯誤訊息表示您正在嘗試還原位於另一個區域內 Amazon S3 儲存貯體中的 ElastiCache 備份:

「存取 S3 物件許可被拒。請在相同區域中使用 S3 物件。」

若要解決此問題,請執行下列動作:

1.    將備份 (.rdb) 從包含備份的 S3 儲存貯體複製到要還原 Redis 叢集的區域中的 S3 儲存貯體

以下是 AWS Command Line Interface (AWS CLI) 命令的範例,可用於在不同區域的 Amazon S3 儲存貯體之間進行複製:

aws s3 cp s3://SourceBucketName/BackupName.rdb s3://DestinationBucketName/BackupName.rdb --acl bucket-owner-full-control --source-region SourceRegionName --region DestinationRegionName

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI

2.    複製完成後,請確認備份 (.rdb) 物件具有以標準 ID 或儲存貯體政策形式指派給它的正確許可。如需正確的正式 ID,請參閱上一章節。

現在備份物件已複製到正確的區域,並套用了正確的許可,您可以繼續還原叢集了。

您要將包含多個資料庫的 .rdb 檔案還原至 ElastiCache (已啟用叢集模式) 叢集

您無法將包含多個資料庫的 Redis 備份 (.rdb) 檔案還原至 ElastiCache (已啟用叢集模式) 叢集。ElastiCache (已啟用叢集模式) 不支援多個資料庫。所有金鑰都應位於 DB0 中。您可以檢閱 ElastiCache Events 來確認這是否是還原失敗的原因。

下列的 ElastiCache Events 範例顯示 Redis 複寫群組 "test" 建立失敗,因為 .rdb 檔案包含了多個資料庫。

Restore from snapshot failed for node group 0001 in replication group test. To restore a snapshot in cluster mode, all keys in the RDB file should reside in DB 0. Snapshot ID: arn:aws:s3:::example-bucket/multidb.rdb

若要修正此問題,請執行下列動作:

1.    請確定所有金鑰都已移轉至同一個資料庫。

**注意:**如果來源資料庫位於 ElastiCache Redis 上,則不支援移轉命令

2.    在所有金鑰都位於同一個資料庫之後,您可以建立 Redis 資料庫的本機備份、將備份上傳到 Amazon S3 ,然後繼續還原至 ElastiCache (已啟用叢集模式) 叢集


AWS 官方
AWS 官方已更新 2 年前