資料保護基礎:如何備份 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 的一項有效特點,可保護儲存桶中的資料免於損毀、意外寫入變更以及刪除。當檔案(在 S3 中以物件形式儲存)發生變更時,系統會建立該物件的新版本。 同一物件的多個版本會儲存於儲存桶中。您可以存取並還原該物件的先前版本。若物件被刪除,系統會對該物件套用"刪除標記",但您可以撤銷此操作,並開啟刪除前的物件先前版本。 Amazon S3 版本控制功能無需額外的 S3 備份軟體即可使用。
您可以透過生命週期政策定義版本在 S3 儲存桶中的保留時間,以此作為 Amazon S3 備份的一種形式。若您正確設定生命週期政策,且新版本會取代最舊的版本,則儲存額外版本所產生的額外成本應不會太高。舊版本可被刪除,或移至更具成本效益的儲存空間(例如冷儲存)以優化成本。
如何啟用 AWS S3 版本控制
請使用具備足夠權限的帳戶登入 AWS 管理主控台。點擊 Services 然後選擇 S3 在 儲存 類別。
在導覽窗格中,按一下 Buckets 並選擇您要為其啟用版本控制的 S3 儲存桶。在此範例中,我選擇名稱為 blog-bucket01. 點擊儲存桶名稱以開啟儲存桶詳細資訊。
開啟 Properties 選取的儲存桶的"設定"分頁。
在 儲存桶版本控制 區段,點擊 Edit.
預設情況下,儲存桶版本控制功能已停用。
點擊 Enable 要啟用儲存桶版本控制。
點擊 Save Changes.
系統會顯示一則提示,指出您可能需要更新生命週期規則。這是下一步。
若已套用設定變更,頁面頂端將顯示以下訊息: 已成功編輯儲存桶版本控制.
生命週期規則
若要為 Amazon S3 版本控制設定生命週期規則,請前往 Management 選取的儲存桶頁面上的 [標籤] 頁籤。在 生命週期規則 區段,點擊 Create lifecycle rule.
該 建立生命週期規則 頁面已開啟。
Lifecycle Rule configuration. 輸入生命週期規則名稱,例如, 部落格生命週期 01.
選擇規則範圍。您可以透過篩選器將生命週期規則套用至特定物件,或將規則套用至儲存桶中的所有物件。
定義物件標籤,以指定必須套用生命週期動作的物件。在相應欄位中輸入鍵值對,然後按一下 Add tag 按鈕以新增標籤,或 Remove 按一下此按鈕以移除標籤。
Lifecycle rule actions. 請選擇您希望此規則執行的動作:
- 過渡 當前 不同儲存類別間的物件版本
- 過渡 上一頁 不同儲存類別間的物件版本
- 到期 當前 物件的版本
- 永久刪除 上一頁 物件的版本
- 刪除已過期的刪除標記或未完成的多部分上傳
Transition noncurrent versions of objects between storage classes.
選擇儲存類別的轉換,以及物件在經過多少天後會被視為非當前物件。
在我的範例中,物件會從當前的 S3 儲存類別移至 標準-IA 35天後。
Permanently delete previous versions of objects.
輸入過期版本必須被刪除的天數。此數值必須大於物件被視為過期的天數。在我的範例中,物件會在 40 天後被永久刪除。
點擊 Create Rule 建立生命週期規則。
複製"Bucket"
作為 Amazon S3 自動備份的替代方案,您可以將儲存桶跨區域進行複製。您需要建立一個位於其他區域的第二個儲存桶作為目標儲存桶,並建立一項複製規則。建立複製規則後,來源儲存桶中的所有變更都會自動反映在目標儲存桶中。
請前往位置 Replication rules 中的""部分 管理 您的來源儲存桶的"標籤"頁,然後點擊 Create replication rule.
該 建立複寫規則 頁面開啟。
輸入複製規則名稱,例如, 部落格 S3 儲存桶複製.
定義規則建立時的狀態 (enabled 或 disabled).
來源儲存桶。來源儲存桶已選取(blog-bucket01).
選擇規則範圍。您可以將複製規則套用至儲存桶中的所有物件,或設定篩選條件並將規則套用至自訂物件。
目標。輸入目標儲存桶名稱,或點擊 Browse S3 並從清單中選取一個儲存桶。您可以選取此帳戶中的儲存桶,或選取其他帳戶中的儲存桶。若來源儲存桶已啟用 AWS S3 版本控制,則目標儲存桶也必須啟用物件版本控制。系統會顯示所選目標儲存桶對應的目標區域。
設定身分與存取管理 (IAM) 角色,然後選擇儲存類別及額外的複製選項。按一下 Save 以儲存設定並為該儲存桶建立複製規則。
在 CLI 中執行 AWS S3 備份
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
替換 您的儲存桶名稱 並輸入您的儲存桶名稱(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 執行 AWS 在 crontab 所使用的殼層環境中正確執行該應用程式。
將腳本設為可執行:
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 執行個體以及實體機器。











