管理本地系統與雲端儲存之間的檔案同步不應該讓您頭痛。
AWS S3提供了一個方便的命令列工具,簡化了在本地環境與亞馬遜的簡單儲存服務桶(S3)之間保持檔案同步的過程。這個工具對於開發人員、系統管理員以及任何需要在多個地點保持一致檔案版本的人來說尤為寶貴。只需執行幾個命令,您就能有效地傳輸檔案、建立備份,並實施災難恢復解決方案。
AWS命令列介面(CLI)使這些操作對廣泛的使用者都可用。當然,它可能沒有Google Drive或OneDrive方便,但它也有一些竅門。
在本教程中,我將介紹有關AWS S3同步的一切,從基本設置到高級用法模式。
>什麼是S3?閱讀我們的S3指南,了解基本知識。
什麼是AWS S3 Sync?
AWS S3 Sync是一個功能強大的命令行工具,隨AWS CLI工具包一起提供。它旨在快速在本地文件系統和S3存儲桶之間同步文件。
把S3 Sync想像成雲端的rsync。該命令會分析來源和目的地位置的差異,然後僅傳輸必要的內容使它們保持一致。這種方法相比於單純的文件傳輸方法可以節省頻寬、時間和潛在費用。
在幕後,S3同步通過API調用來比較對象的元數據,如文件大小和修改時間戳。當它檢測到差異時,它會處理上傳或下載文件的繁重工作。
S3同步的優勢在於其簡單性。基本命令看起來像這樣:
aws s3 sync /local/directory s3://my-bucket/path
當然,您將不得不設置CLI來使用aws
命令,但您已經掌握了要點-使用起來非常簡單。
總之,S3同步掩蓋了幕後正在發生的復雜操作,並為您提供了一種簡單的方法來保持相同的文件狀態跨環境一致。無論您是在備份重要數據、部署web資產還是管理大型數據集,S3同步都會為您處理所有繁重的工作。
設置AWS CLI和AWS S3
在開始將檔案與S3同步之前,您需要正確地設置和配置AWS CLI。如果您對AWS還不熟悉,這聽起來可能有點嚇人,但實際上只需要幾分鐘時間。
設置CLI涉及兩個主要步驟:安裝工具和配置。接下來我將逐步介紹這兩個步驟。
安裝AWS CLI
安裝AWS CLI的步驟略有不同,取決於您的操作系統。
對於Windows系統:
- 前往AWS CLI下載頁面
- 下載Windows安裝程式(64位元)
- 執行安裝程式並按照提示進行操作
對於Linux系統:
透過終端機執行以下三個命令:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install
對於macOS系統:
假設您已安裝Homebrew,從終端機執行以下一行命令:
brew install awscli
如果您沒有Homebrew,請改用以下兩個命令:
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" sudo installer -pkg AWSCLIV2.pkg -target /
您可以在所有作業系統上運行aws --version
命令來驗證 AWS CLI 是否已安裝。您應該看到以下內容:
圖片1 – AWS CLI 版本
配置 AWS CLI
現在您已經安裝了CLI,需要使用您的AWS憑證進行配置。
假設您已經有AWS帳戶,請登錄並前往IAM服務。在那裡,創建一個具有程序化訪問權限的新用戶。您應該為該用戶分配適當的權限,最低要求是S3訪問權限:
圖片 2 – AWS IAM 用戶
完成後,轉到”安全憑證”創建新的訪問密鑰。創建後,您將同時擁有 訪問密鑰 ID 和 秘密訪問密鑰。將它們記錄在安全的地方,因為將來將無法再訪問它們:
圖片 3 – AWS IAM 用戶憑證
回到終端,運行aws configure
命令。它將提示您輸入您的存取金鑰 ID、秘密存取金鑰、區域(在我這裡是eu-central-1
)和首選輸出格式(json
):
圖片 4 – AWS CLI 配置
要驗證您已成功從 CLI 連接到您的 AWS 帳戶,運行以下命令:
aws sts get-caller-identity
這是您應該看到的輸出:
圖片 5 – AWS CLI 測試連接命令
這就是了 – 您只需再進行一個步驟,就可以開始使用 S3 同步命令!
設置 AWS S3 存儲桶
最後一步是創建一個 S3 存儲桶,用於存儲您同步的文件。您可以通過 CLI 或 AWS 管理控制台進行操作。我會選擇後者,讓事情變得豐富多彩。
首先,進入管理控制台中的 S3 服務頁面,並點擊“創建存儲桶”按鈕。在那裡,選擇一個唯一的存儲桶名稱(在整個 AWS 範圍內全局唯一),然後滾動到底部並點擊“創建”按鈕:
圖片 6 – AWS 存儲桶創建
現在存儲桶已經創建,您會立即在管理控制台中看到它。您也可以通過 CLI 驗證它是否已創建:
aws s3 ls
圖片 7 – 所有可用的 S3 存儲桶
請記住S3 桶默認為私有。如果您打算將該桶用於托管公共文件(如網站資產),則需要相應地調整桶的策略和權限。
現在您已經準備就緒,可以開始在本地計算機和 AWS S3 之間同步文件了!
基本的 AWS S3 同步命令
既然您已經安裝配置了 AWS CLI,並且準備好一個 S3 桶,那麼現在是開始進行同步的時候了! AWS S3 同步命令的基本語法非常簡單。讓我來展示一下它是如何工作的。
S3 同步命令遵循這個簡單的模式:
aws s3 sync <source> <destination> [options]
來源和目的地可以是本地目錄路徑,也可以是以 s3://
開頭的 S3 URI。根據您想要同步的方式,您會以不同方式安排這些。
從本地同步文件到 S3 存儲桶
最近我一直在玩 Ollama 深度研究。假設這就是我想要同步到 S3 的文件夾。主目錄位於 Documents
文件夾下。這是它的外觀:
本地文件夾內容
這是我需要運行的命令,將本地的 code-files
文件夾與 S3 存儲桶上的 backup
文件夾同步:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup
如果 S3 存儲桶上的 backup
文件夾不存在,它將自動創建。
這是您將在控制台上看到的內容:
圖片 9 – S3 同步處理
幾秒後,本地code-files
文件夾的內容將可在 S3 存儲桶上使用:
圖片 10 – S3 存儲桶內容
S3 同步的美妙之处在于它仅上传目标位置不存在或在本地已被修改的文件。如果您再次运行相同的命令而不改变任何内容,您将看不到任何变化!这是因为 AWS CLI 检测到所有文件已经同步且为最新状态。
现在,我将进行两个小更改 – 创建一个新文件(new_file.txt
)并更新一个现有文件(requirements.txt
)。当您再次运行同步命令时,只有新的或已修改的文件将被上传:
图像 11 – S3 同步过程(2)
這就是同步本地文件夾到 S3 時需要了解的全部。但如果你想從另一個方向做呢?
從 S3 存儲桶同步文件到本地目錄
如果你想從 S3 存儲桶下載文件到本地機器,只需將來源和目的地對調:
aws s3 sync s3://testbucket-dradecic/backup /Users/dradecic/Documents/code-files-from-s3
此命令將從你的 S3 存儲桶中的 backup
文件夾下載所有文件到一個名為 code-files-from-s3
的本地文件夾。同樣,如果本地文件夾不存在,CLI 將為你創建它:
圖片 12 – S3 到本地同步
值得注意的是S3同步不是双向的。它总是从源到目的地,使目的地与源匹配。如果您在本地删除文件然后将其同步到S3,它仍将存在于S3中。同样,如果您在S3中删除文件并从S3同步到本地,本地文件将保持不变。
如果您希望使目的地与源完全匹配(包括删除),您需要使用--delete
标志,我将在高级选项部分进行介绍。
高级AWS S3同步选项
之前探讨的基本S3同步命令本身就很强大,但AWS已经为其提供了额外选项,让您更好地控制同步过程。
在這一部分,我將向您展示一些您可以添加到基本命令中的最有用的標誌。
僅同步新文件或已修改文件
默認情況下,S3同步使用基本比較機制,檢查文件大小和修改時間來確定是否需要同步文件。然而,這種方法在處理已修改但保持相同大小的文件時,可能不總是能夠捕捉到所有更改。
為了更精確地同步,您可以使用--exact-timestamps
標誌:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --exact-timestamps
這會強制 S3 同步比較時間戳記,精確到毫秒。請注意使用此標誌可能會稍微減慢同步過程,因為需要進行更詳細的比較。
排除或包含特定文件
有時,您不希望同步目錄中的每個文件。也許您想排除臨時文件、日誌或某些文件類型(例如在我的情況下的 .DS_Store
)。這就是 --exclude
和 --include
標誌派上用場的地方。
但為了舉例說明,假設我想同步我的代碼目錄,但排除所有 Python 文件:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --exclude "*.py"
現在,同步到S3的文件大大減少:
圖片13 – 排除Python文件的S3同步
您還可以結合--exclude
和--include
來創建更複雜的模式。例如,排除除Python文件以外的所有文件:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --exclude "*" --include "*.py"
模式將按照指定的順序進行評估,因此順序很重要!當使用這些標誌時,您將看到以下內容:
圖片14 – 排除和包含標誌
現在只有Python文件被同步,重要的配置文件則遺失。
從目的地刪除文件
預設情況下,S3同步只會新增或更新目的地中的文件,絕不會刪除它們。這意味著如果您從來源刪除文件,同步後它仍然會保留在目的地。
要使目的地完全反映來源,包括刪除操作,請使用--delete
標誌:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --delete
如果您第一次運行這個命令,所有本地文件將被同步到S3:
圖片15 – 刪除標誌
這對於維護目錄的精確副本特別有用。但要小心 – 如果使用不當,此標誌可能導致數據丟失。
假設我從本地文件夾中刪除了config.py
並運行帶有--delete
標誌的同步命令:
圖片 16 – 刪除標誌 (2)
如您所見,該命令不僅同步新文件和修改文件,還會刪除在本地目錄中不再存在的文件
設置乾跑以進行安全同步
最危險的S3同步操作是涉及--delete
標誌的操作。為了避免意外刪除重要文件,您可以使用--dryrun
標誌來模擬操作,而不會實際進行任何更改:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --delete --dryrun
為了演示,我已從本地文件夾中刪除了requirements.txt
和settings.toml
文件,然後執行了以下命令:
圖片17 – 乾跑
這將準碧地顯示如果您真正運行命令將會發生什麼,包括將上傳、下載或刪除哪些文件。
我始終建議在執行帶有--delete
標誌的任何S3同步命令之前使用--dryrun
,特別是在處理重要數據時。
對於 S3 sync 命令,還有許多其他選項可用,例如 --acl
用於設置權限,--storage-class
用於選擇 S3 存儲級別,--recursive
用於遍歷子目錄。查看完整的選項列表,請參閱 官方 AWS CLI 文件。
現在您已經熟悉基本和高級 S3 同步選項,讓我們看看如何將這些命令應用於像備份和還原這樣的實際場景。
使用 AWS S3 同步進行備份和還原
AWS S3 同步的最受歡迎用例之一是備份重要文件並在需要時還原它們。讓我們探索如何使用同步命令實現簡單的備份和還原策略。
創建到 S3 的備份
使用S3同步创建备份很简单——您只需从您的本地目录运行同步命令到一个S3存储桶。但是,有一些有效备份的最佳实践需要遵循。
首先,最好 按日期或版本组织您的备份。以下是一种在S3路径中使用时间戳的简单方法:
# 创建一个时间戳变量 TIMESTAMP=$(date +%Y-%m-%d-%H-%M-%S) # 运行备份 aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backups/$TIMESTAMP
这将为每个备份创建一个带有类似2025-03-10-18-56-42
时间戳的新文件夹。以下是您在S3上看到的内容:
圖片18 – 時間戳備份
對於重要數據,您可能希望保留多個備份版本。只需定期運行基於時間戳的備份即可輕鬆完成。
您還可以使用--storage-class
選項來指定更具成本效益的存儲級別 用於您的備份:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backups/$TIMESTAMP --storage-class STANDARD_IA
圖片19 – 具有自定義存儲級別的備份內容
這使用了 S3 的低頻存取存儲類別,成本較低但有輕微的檢索費用。對於長期存檔,甚至可以使用 Glacier 存儲類別:
aws s3 sync /Users/dradecic/Documents/important-data s3://testbucket-dradecic/backups/$TIMESTAMP --storage-class GLACIER
請記住,從 Glacier 存儲的文件恢復需要數小時,因此不適用於您可能需要快速存取的數據。
從 S3 恢復文件
從備份中恢復同樣很容易 – 只需在同步命令中 將源和目的地對調:
# 從最近的備份中恢復(假設您知道時間戳記) aws s3 sync s3://testbucket-dradecic/backups/2025-03-10-18-56-42 /Users/dradecic/Documents/restored-data
這將從該特定備份下載所有文件到您的本地restored-data
目錄:
圖片20 – 從S3恢復文件
如果您不記得確切的時間戳,您可以首先列出所有備份:
aws s3 ls s3://testbucket-dradecic/backups/
這將顯示類似於:
圖片21 – 備份列表
您也可以使用我們之前討論過的排除/包含標誌從備份中恢復特定文件或目錄:
# 只恢復配置文件 aws s3 sync s3://testbucket-dradecic/backups/2025-03-10-18-56-42 /Users/dradecic/Documents/restored-configs --exclude "*" --include "*.config" --include "*.toml" --include "*.yaml"
對於關鍵系統,我建議使用定期任務(如Linux/macOS上的cron工作或Windows上的任務計畫器)來自動備份。這可確保您在無需手動記得的情況下持續備份數據。
解決 AWS S3 同步問題
AWS S3 同步是一個可靠的工具,但偶爾可能會遇到問題。不過,大多數錯誤是人為造成的。
常見的同步錯誤
讓我們來看看一些常見問題及其解決方案。
- 拒絕訪問錯誤通常表示您的 IAM 使用者沒有訪問 S3 存儲桶或執行特定操作所需的權限。要解決此問題,請嘗試以下方法之一:
- 檢查您的 IAM 使用者是否具有適當的 S3 權限(
s3:ListBucket
、s3:GetObject
、s3:PutObject
)。 - 確認存儲桶政策沒有明確拒絕您的使用者訪問。
- 如果需要公開操作,請確保存儲桶本身沒有阻止公共訪問。
- 找不到文件或目錄錯誤通常在您在同步命令中指定的源路徑不存在時出現。解決方案很簡單 – 仔細檢查您的路徑並確保它們存在。特別注意存儲桶名稱或本地目錄中的拼寫錯誤。
- 文件大小限制 當您想要同步大文件時,可能會發生錯誤。默認情況下,S3同步可以處理最大5GB大小的文件。對於更大的文件,您將會看到超時或傳輸不完整。
- 對於超過5GB的文件,您應該使用
--only-show-errors
標誌與--size-only
標誌。這種組合有助於通過最小化輸出並僅比較文件大小來進行大文件傳輸:
aws s3 sync /Users/dradecic/large-files s3://testbucket-dradecic/large-files --only-show-errors --size-only
同步性能優化
如果您的S3同步運行速度比預期慢,您可以進行一些調整以加快速度。
- 使用平行傳輸。預設情況下,S3同步使用有限數量的平行操作。您可以通過
--max-concurrent-requests
參數來增加這個數量:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --max-concurrent-requests 20
- 調整分塊大小。對於大文件,您可以通過調整分塊大小來優化傳輸速度。將大文件分解為16MB的塊,而不是默認的8MB,這對於良好的網絡連接可能會更快:
aws s3 sync /Users/dradecic/large-files s3://testbucket-dradecic/backup --cli-read-timeout 120 --multipart-threshold 64MB --multipart-chunksize 16MB
- 對於腳本使用
--no-progress
。如果您在自動化腳本中運行S3同步,請使用--no-progress
標誌來減少輸出並提高性能:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --no-progress
- 使用本地端點。如果您的 AWS 資源位於同一區域,指定區域端點可以減少延遲:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --endpoint-url https://s3.eu-central-1.amazonaws.com
這些優化可以顯著提高同步性能,特別是在進行大型數據傳輸或在性能較弱的機器上運行時。
如果您嘗試了這些解決方案後仍然遇到問題,AWS CLI 內置了一個調試選項。只需將 --debug
添加到您的命令中,以查看同步過程中發生的詳細信息:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --debug
期望看到大量詳細的日誌消息,類似於這些:
圖片 22 – 在調試模式下運行同步
至於AWS S3同步的故障排除,基本上就是這些了。當然,可能會發生其他錯誤,但99%的時間,您會在這個部分找到解決方案。
總結AWS S3同步
總結一下,AWS S3同步是那種既易於使用又極其強大的罕見工具之一。您已經從基本命令到高級選項、備份策略和故障排除提示學到了一切。
對於開發人員、系統管理員或任何與AWS合作的人來說,S3同步命令是一個必不可少的工具 – 它節省時間、減少頻寬使用量,確保您的文件在您需要它們時在您需要的地方。
無論您是備份關鍵數據、部署Web資產還是只是保持不同環境同步,AWS S3同步都使這個過程變得簡單和可靠。
熟悉S3同步的最佳方法是开始使用它。尝试使用自己的文件设置一个简单的同步操作,然后逐渐探索高级选项以满足您的特定需求。
请记住,在处理重要数据时,特别是在使用--delete
标志时,始终首先使用--dryrun
。最好多花一分钟验证将发生的事情,而不是意外删除重要文件。
要了解更多关于AWS的信息,请查看DataCamp提供的这些课程:
您甚至可以使用DataCamp來準備AWS認證考試 – AWS Cloud Practitioner (CLF-C02)。