AzCopy 是命令列工具,您可以用來將 Blob 或檔案複製到儲存帳戶中,或從儲存帳戶中複製檔案。 本文可協助您使用 AzCopy,將物件、目錄和貯體從 Amazon Web Services (AWS) S3 複製到 Azure Blob 記憶體。
備註
AzCopy 支援由 AWS 定義的標準虛擬裝載樣式或路徑樣式 URL。 例如:https://bucket.s3.amazonaws.com
或 https://s3.amazonaws.com/bucket
。
選擇您將如何提供授權認證
若要使用 Azure 記憶體授權,請使用 Microsoft Entra 識別碼或共用存取簽章 (SAS) 令牌。
若要使用 AWS S3 進行授權,請使用 AWS 存取金鑰和秘密存取金鑰。
使用 Azure 記憶體授權
請參閱 開始使用 AzCopy 一文來下載 AzCopy,然後選擇您將如何將授權認證提供給記憶體服務。
備註
本文中的範例假設您已使用 AzCopy login
命令來驗證身分識別。 AzCopy 接著會使用您的 Microsoft Entra 帳戶來授權存取 Blob 記憶體中的數據。
如果您想改為使用 SAS 權杖來授權存取 Blob 資料,則可將該權杖附加至每個 AzCopy 命令中的資源 URL。
例如: https://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>
。
使用 AWS S3 授權
收集 AWS 存取金鑰和秘密存取金鑰,然後設定下列環境變數:
操作系統 | 命令 |
---|---|
Windows | PowerShell:$env:AWS_ACCESS_KEY_ID=<access-key> $env:AWS_SECRET_ACCESS_KEY=<secret-access-key> 在命令提示字元中,請使用: set AWS_ACCESS_KEY_ID=<access-key> set AWS_SECRET_ACCESS_KEY=<secret-access-key> |
Linux | export AWS_ACCESS_KEY_ID=<access-key> export AWS_SECRET_ACCESS_KEY=<secret-access-key> |
macOS | export AWS_ACCESS_KEY_ID=<access-key> export AWS_SECRET_ACCESS_KEY=<secret-access-key> |
這些認證可用來產生用來複製物件的預先簽署 URL。
複製物件、目錄和貯體
AzCopy 使用 Put Block From URL API,因此數據會直接在 AWS S3 和記憶體伺服器之間複製。 這些複製作業不會使用您電腦的網路頻寬。
小提示
此節中的範例會以單引號 ('') 括住路徑引數。 除了 Windows 命令殼層 (cmd.exe) 以外,在所有命令殼層中使用單引號。 如果您使用 Windows 命令殼層 (cmd.exe),請使用雙引號 ("") 括住路徑引數,而非單引號 ('')。
這些範例也適用於具有階層命名空間的帳戶。 Data Lake Storage 上的多重通訊協定存取 可讓您在這些帳戶上使用相同的 URL 語法(blob.core.windows.net
)。
複製物件
針對具有階層命名空間的帳戶,使用相同的URL語法 (blob.core.windows.net
)。
語法
azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<object-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'
範例
azcopy copy 'https://s3.amazonaws.com/mybucket/myobject' 'https://mystorageaccount.blob.core.windows.net/mycontainer/myblob'
備註
此文章中的範例使用適用於 AWS S3 貯體的路徑樣式 URL (例如:http://s3.amazonaws.com/<bucket-name>
)。
您也可以使用虛擬託管樣式的 URL(例如: http://bucket.s3.amazonaws.com
)。
若要深入了解貯體的虛擬託管,請參閱儲存貯體的虛擬託管。
複製目錄
針對具有階層命名空間的帳戶,使用相同的URL語法 (blob.core.windows.net
)。
語法
azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<directory-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true
範例
azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true
備註
此範例會附加 --recursive
旗標,以複製所有子目錄中的檔案。
複製目錄的內容
您可以使用通配符 *,複製目錄的內容,而不複製包含的目錄本身。
語法
azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<directory-name>/*' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true
範例
azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory/*' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true
複製貯體
針對具有階層命名空間的帳戶,使用相同的URL語法 (blob.core.windows.net
)。
語法
azcopy copy 'https://s3.amazonaws.com/<bucket-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>' --recursive=true
範例
azcopy copy 'https://s3.amazonaws.com/mybucket' 'https://mystorageaccount.blob.core.windows.net/mycontainer' --recursive=true
複製所有區域中的所有貯體
針對具有階層命名空間的帳戶,使用相同的URL語法 (blob.core.windows.net
)。
語法
azcopy copy 'https://s3.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true
範例
azcopy copy 'https://s3.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true
複製特定 S3 區域中的所有貯體
針對具有階層命名空間的帳戶,使用相同的URL語法 (blob.core.windows.net
)。
語法
azcopy copy 'https://s3-<region-name>.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true
範例
azcopy copy 'https://s3-rds.eu-north-1.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true
處理物件命名規則的差異
相較於 Azure Blob 容器,AWS S3 針對貯體名稱有不同的命名慣例。 您可以 在這裡閱讀它們。 如果您選擇將一組貯體複製到 Azure 記憶體帳戶,複製作業可能會因為命名差異而失敗。
AzCopy 會處理可能發生的其中兩個最常見問題:包含句點的貯體,以及包含連續連字號的貯體。 AWS S3 貯體名稱可以包含句點和連續的連字號,但 Azure 中的容器不行。 AzCopy 會以連字號取代句點,並以數字取代連續的連字號,該數字代表連續的連字號數目 (例如:名為 my----bucket
的貯體會變成 my-4-bucket
)。
此外,當 AzCopy 複製檔案時,它會檢查命名衝突並嘗試解決。 例如,如果有名稱為 bucket-name
和 bucket.name
的貯體,AzCopy 會先將名為 bucket.name
的貯體解析為 bucket-name
,然後再解析為 bucket-name-2
。
處理物件元數據的差異
AWS S3 和 Azure 允許物件索引鍵名稱中的不同字元集。 您可以 在這裡閱讀 AWS S3 所使用的字元。 在 Azure 端,Blob 物件金鑰會遵守 C# 識別碼的命名規則。
在 AzCopy copy
命令中,您可以為選擇性 s2s-handle-invalid-metadata
旗標提供值,指定如何處理檔案元數據包含不相容密鑰名稱的檔案。 下表描述每個旗標值。
旗標值 | 說明 |
---|---|
無效時排除 | (預設選項)元數據不會包含在傳送的物件中。 AzCopy 會記錄警告。 |
FailIfInvalid | 物件是不會複製的。 AzCopy 會記錄錯誤,並在傳輸摘要中顯示的失敗計數中包含該錯誤。 |
若無效則重新命名 | AzCopy 會解析無效的元數據金鑰,並使用已解析的元數據密鑰值組將物件複製到 Azure。 若要確切瞭解 AzCopy 重新命名物件索引鍵所採取的步驟,請參閱下面的 AzCopy 如何重新命名物件索引鍵 一節。 如果 AzCopy 無法重新命名金鑰,則不會複製物件。 |
AzCopy 如何重新命名物件索引鍵
AzCopy 會執行下列步驟:
將無效的字元取代為 『_』。
將字串
rename_
新增至新有效索引鍵的開頭。此索引鍵將用來儲存原始元數據 值。
將字串
rename_key_
新增至新有效索引鍵的開頭。 此索引鍵將用來儲存原始中繼資料的無效值。 您可以使用此金鑰嘗試復原 Azure 端的元數據,因為元數據金鑰會保留為 Blob 記憶體服務上的值。
後續步驟
如需更多範例,請參閱以下文章:
- 範例: 上傳
- 範例: 下載
- 範例:在帳戶之間複製
- 範例:同步處理
- 範例:Google Cloud Storage
- 範例:Azure Files
- 教學課程:使用 AzCopy 將內部部署資料移轉至雲端儲存體
請參閱下列文章,以進行設定、將效能最佳化,以及針對問題進行疑難排解: