資料保護基礎:如何備份 Amazon S3 儲存桶
Amazon S3 是由 Amazon Web Services (AWS) 提供的可靠雲端儲存服務。檔案會以物件的形式儲存於 Amazon S3 儲存桶中。由於 Amazon S3 具備高度可靠性,此儲存服務廣泛用於儲存資料備份。與 Amazon Elastic Block Storage (EBS) 將冗餘資料儲存於單一可用區域不同,在 Amazon S3 中,冗餘資料會分散儲存於多個可用區域。
若某個可用區域的資料中心無法運作,您仍可存取位於其他可用區域的資料。在某些情況下,您可能需要備份儲存於 Amazon S3 儲存桶中的資料,以避免因人為錯誤或軟體故障導致的資料遺失。若具有 S3 儲存桶存取權限的使用者刪除資料,或透過寫入不必要的變更而導致資料損毀,資料便可能遭刪除或損毀。軟體故障亦可能造成類似的後果。
Amazon S3 版本控制
Amazon S3 的對象版本控制是一個有效的特點,可以保護您儲存桶中的資料免受損壞、寫入不想要的更動和刪除。當對 Amazon S3 中的檔案(即儲存為物件)進行更動時,便會創建該物件的新版本。同一個物件的多個版本儲存在一個儲存桶中。您可以存取並重新儲存物件的先前版本。如果物件被刪除,將會在該物件上標記為“刪除標記”,但您可以反轉此操作,重新開放刪除前的物件版本。Amazon S3 版本控制可在無額外 S3 備份軟體的情況下使用。
您可以使用生命周期原則來定義應在 S3 儲存桶中儲存版本的時間長度,從而形成一種 Amazon S3 備份。如果適當配置生命周期原則,則儲存附加版本的額外成本不會很高,且新版本會替換掉最舊的版本。舊版本可以刪除或移動至更具成本效益的儲存(例如冷存儲)以優化成本。
如何啟用 AWS S3 版本控制
使用擁有足夠權限的帳戶登入 AWS Management Console。點擊Services,然後在S3 儲存 類別中選擇。
在導航窗格中,點擊Buckets並選擇您要啟用版本控制的 S3 儲存桶。在此範例中,選擇名為 blog-bucket01 的儲存桶。點擊儲存桶名稱以打開其詳細資訊。
為所選儲存桶開啟Properties 標籤。
在 儲存桶版本控制 部分,點擊Edit。
預設情況下,儲存桶版本控制已停用。
點擊Enable以開啟儲存桶版本控制。
點擊Save Changes。
將顯示提示,您可能需要更新生命周期規則。這是下一步。
如果組態變更已應用,頁面頂部將顯示訊息: 已成功編輯儲存桶版本控制 。
生命周期規則
為了設定 Amazon S3 版本控制的生命周期規則,請至所選儲存桶的頁面上的Management標籤。在 生命周期規則 部分,點擊Create lifecycle rule。
建立生命周期規則 頁面已打開。
Lifecycle Rule configuration. 輸入生命周期規則名稱,例如, Blog lifecycle 01 。
選擇規則範疇。您可以應用篩選器以將生命周期規則適用於特定物件,或將規則應用於儲存桶中的所有物件。 定義物件標籤,以指定必須套用生命週期動作的物件。在相應欄位中輸入鍵值對,然後按一下 Add tag 按鈕以新增標籤,或按一下 Remove 按鈕以移除標籤。
Lifecycle rule actions. 選擇您希望此規則執行的動作:
- 轉換 當前 物件版本在儲存類別間的轉換
- 轉換 先前 物件版本在儲存類別間的轉換
- 過期 當前 物件版本
- 永久刪除 先前 物件版本
- 刪除已過期的刪除標記或未完成的多部分上傳
Transition noncurrent versions of objects between storage classes。
選擇儲存類別轉換,以及物件在經過多少天後會被視為非當前。
在我的範例中,物件會在 35 天後從當前的 S3 儲存類別移至 Standard-IA 。
Permanently delete previous versions of objects。
輸入過往版本必須被刪除的天數。此值必須大於物件被視為過期的天數。在我的範例中,物件會在 40 天後被永久刪除。
點擊 Create Rule 以建立生命週期規則。
複製儲存桶
除了使用 Amazon S3 自動備份外,您也可以跨區域複製儲存桶。您需要建立另一個位於不同區域的目標儲存桶,並建立一則複製規則。建立複製規則後,來源儲存桶中的所有變更都會自動反映在目標儲存桶中。
在來源儲存桶的 Replication rules 管理 分頁中,找到 區段,然後點擊 Create replication rule。
系統將開啟 建立複製規則 頁面。
輸入複製規則名稱,例如: “Blog S3 儲存桶複製” 。
定義規則建立時的狀態(enabled 或 disabled)。
來源儲存桶。來源儲存桶已選取( blog-bucket01 )。
選擇規則範圍。您可以將複製規則套用至儲存桶中的所有物件,或設定篩選條件並將規則套用至自訂物件。
目標。 輸入目標儲存桶名稱,或點擊 Browse S3 並從清單中選取儲存桶。您可以選取此帳戶或另一個帳戶中的儲存桶。若來源儲存桶已啟用 AWS S3 版本控制,則目標儲存桶也必須啟用物件版本控制。系統會顯示所選目標儲存桶的目標區域。 
設定身分與存取管理 (IAM) 角色,然後選擇儲存類別及額外的複製選項。按一下” Save “以儲存設定,並為該儲存桶建立複製規則。
AWS S3 備份(透過 CLI)
AWS CLI 是一個功能強大的命令列介面,可用於操作各種 Amazon 服務,包括 Amazon S3。 其中有一項實用的 sync 指令,可讓您將 Amazon S3 儲存桶備份至 Linux 機器,方法是將儲存桶中的檔案複製到運行於 Amazon EC2 執行個體上的 Linux 系統的本地目錄中。
AWS CLI 中 sync 指令的一項特點是,若來源 S3 儲存桶中缺少某個檔案,本地檔案系統(Amazon S3 備份目的地)中的該檔案並不會被刪除,反之亦然。 這對 AWS S3 備份至關重要,因為若 S3 儲存桶中的某些檔案不慎被刪除,同步完成後,Linux 主機的本地目錄中現有檔案並不會被刪除。
優點:
- 支援大型 S3 儲存桶且具備可擴展性
- 同步過程中支援多執行緒
- 僅同步新檔案及已更新檔案的能力
- 憑藉智慧演算法實現高速同步
缺點:
- 在 EC2 執行個體上運行的 Linux 會佔用 EBS 卷的儲存空間。EBS 卷的儲存成本高於 S3 儲存桶。
本教學使用 Ubuntu Server 的指令。
首先,您需要安裝 AWS CLI。
更新儲存庫樹:
sudo apt-get update
安裝 AWS CLI:
sudo apt install awscli
或
安裝 unzip:
sudo apt install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscli-exe-linux-x86_64.zip
sudo ./aws/install
檢查您 EC2 執行個體上 Linux 系統中的 AWS 憑證。
aws configure list
若尚未設定憑證,請從 Linux 執行個體透過 AWS CLI 新增存取 AWS 的憑證:
aws configure
輸入以下參數:
AWS 存取金鑰 ID
AWS 秘密存取金鑰
預設區域名稱
預設輸出格式
建立一個目錄來儲存您的 Amazon S3 備份。在本範例中,我建立 ~/s3/ 目錄來儲存 S3 備份,並在其中建立一個名稱與儲存桶名稱相同的子目錄。 儲存於 S3 儲存桶中的檔案應複製到 Linux 機器上的此本機目錄中。~ 代表使用者的家目錄,以我的情況為例,即 /home/ubuntu 。
mkdir -p ~/s3/your_bucket_name
請將 your_bucket_name 替換為您的儲存桶名稱(本範例中為 blog-bucket01 )。 mkdir -p ~/s3/blog-bucket01
將儲存桶的內容與運行 Linux 的 EC2 執行個體上的本地目錄同步:
aws s3 sync s3:// blog-bucket01 /home/ubuntu/s3/ blog-bucket01/
若憑證設定、儲存桶名稱及目標路徑均正確無誤,資料應會開始從 S3 儲存桶下載。完成此操作所需的時間取決於儲存桶中檔案的大小以及您的網際網路連線速度。
Amazon S3 自動備份
您可以透過 AWS CLI sync 設定 Amazon S3 自動備份工作。 建立一個 sync.sh 腳本檔案來執行 AWS S3 備份(將檔案從 S3 儲存桶同步到您的 Linux 執行個體上的本機目錄),然後按排程執行此腳本。
nano /home/ubuntu/s3/sync.sh
#!/bin/sh
# Display the current date and time
echo '-----------------------------'
date
echo '-----------------------------'
echo ''
# Display the script initialization message
echo 'Syncing remote S3 bucket...'
# Running the sync command
/usr/bin/aws s3 sync s3://{BUCKET_NAME} /home/ubuntu/s3/{BUCKET_NAME}/
# Echo "Script execution is completed"
echo 'Sync complete'
請將 {BUCKET_NAME} 替換為您要備份的 S3 儲存桶名稱。
完整路徑 aws (AWS CLI 二進位檔)已定義,以確保 crontab 能在其使用的 shell 環境中正確執行 aws 應用程式。
將腳本設為可執行:
sudo chmod +x /home/ubuntu/s3/sync.sh
執行腳本以檢查是否運作正常:
/home/ubuntu/s3/sync.sh
編輯當前使用者的 crontab(Linux 中的排程程式),以排程執行 Amazon S3 備份腳本。
crontab -e
您可能需要選擇一個文字編輯器來編輯 crontab 設定。
用於排程任務的 crontab 格式如下:
m h dom mon dow command
其中:m – 分鐘;h – 小時;dom – 當月日期;dow – 星期幾。
現在讓我們新增一條配置行,讓任務每小時執行同步,並將 AWS S3 備份結果儲存至日誌檔案。請將以下這行新增至 crontab 配置的末尾:
0 * * * * /home/ubuntu/s3/sync.sh > /home/ubuntu/s3/sync.log
Amazon S3 自動備份已設定完成。可透過日誌檔案檢查同步任務的執行狀況。
結論
執行 Amazon S3 備份有多種方法,本文已介紹其中兩種。 您可以為儲存桶啟用物件版本控制功能,以保留物件的先前版本,這讓您能在檔案被寫入不想要的變更時,取回原始檔案。Amazon S3 複製是另一項原生工具,可用於將儲存於 Amazon S3 儲存桶中的檔案(以物件形式)建立副本。在此情況下,物件會從一個儲存桶複製到另一個儲存桶。 您亦可透過 AWS CLI 中的同步工具來建立 Amazon S3 儲存桶的備份,此工具可讓您將儲存桶中的檔案與運行於 Amazon EC2 執行個體上的 Linux 機器之本機目錄進行同步。 您可以透過腳本和 crontab 來排程 Amazon S3 的自動備份。
一般而言,Amazon S3 雲端儲存服務非常可靠,將資料備份至 Amazon S3 也是常見的做法。如果您已制定程式碼資料保護策略和 AWS 備份策略,就應該備有備份複製。在此情況下,建議您將資料備份至 Amazon S3 以及另一個目的地位置。 使用 NAKIVO Backup & Replication 來保護您在實體與虛擬機器上的資料。NAKIVO Backup & Replication 是一款功能強大的虛擬化備份軟體,可用於保護虛擬機器(VM)、Amazon EC2 執行個體以及實體機器。










