使用分段上傳來上傳和複製物件 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用分段上傳來上傳和複製物件

您可利用分段上傳,將單一物件以一組組件進行上傳。每個組件都是物件資料的接續部分。您可依任何順序分別上傳這些物件組件。若任何組件的傳輸失敗,您可再次傳輸該組件,而不會影響其他組件。當物件的所有組件都全部上傳完後,Amazon S3 會將這些組件組合起來建立該物件。一般而言,當物件大小達到 100 MB 時,應考慮使用分段上傳,而不是以單次操作上傳物件。

使用分段上傳具備下列優勢:

  • 改善輸送量 - 您可平行上傳各組件以改進輸送量。

  • 快速從任何網路問題復原 - 組件大小若較小,對於重新開始因為網路發生錯誤而上傳失敗的影響可降到最低。

  • 暫停及繼續上傳物件 - 您可在一段時間內上傳物件組件。啟動分段上傳之後就不會過期;您必須明確地完成或中止分段上傳。

  • 在您知道最終物件大小前開始上傳 - 您可在建立物件的同時上傳物件。

建議您依照下列方式使用分段上傳:

  • 若您透過穩定的高頻寬網路上傳大型物件,使用分段上傳可同時上傳多個物件部分以取得多執行緒效能,因而完全善用可用的頻寬使用量。

  • 若是透過不穩定的網路進行上傳,使用分段上傳可避免上傳重新開始,因而此更快從網路故障中復原。使用分段上傳時,只有上傳期間遭到中斷的部分才需要重試上傳。您不需要從頭開始重新上傳物件。

注意

如需將 Amazon S3 Express One Zone 儲存類別與目錄儲存貯體搭配使用的詳細資訊,請參閱 什麼是 S3 Express One Zone?目錄值區。如需使用分段上傳搭配 S3 Express One Zone 和目錄儲存貯體的詳細資訊,請參閱 搭配目錄儲存貯體使用多部分上傳

分段上傳程序

分段上傳是三步驟的程序:啟動上傳功能、上傳物件的各組件,以及在上傳完所有分段後,完成分段上傳。Amazon S3 一收到完整的分段上傳要求時,就會從上傳的組件建構物件,然後您即可像存取儲存貯體中的任何其他物件一樣存取該物件。

您可以列出所有進行中的分段上傳,或是取得特定分段上傳之已上傳組件的清單。本節會一一說明這些操作。

啟動分段上傳

當您傳送要求要啟動分段上傳時,Amazon S3 會傳回具有上傳 ID 的回應,其為分段上傳的唯一識別符。每次上傳分段各組件、列出各組件、完成上傳或停止上傳時,都必須納入此上傳 ID。若希望提供任何中繼資料,說明正在上傳中的物件,您必須在要求中提供它,以啟動分段上傳。

組件上傳

上傳某個分段組件時,除了上傳 ID 之外,還必須指定組件編號。您可選擇 1 到 10,000 之間的任何組件編號。組件編號可找出獨特的某個組件,以及其在上傳中物件內的位置。您選擇的組件編號無須為連續的號碼 (例如,其可為 1、5 和 14)。若使用和前一個上傳組件相同的組件編號上傳新的組件,將會覆寫前一個已上傳的組件。

當您上傳零件時,Amazon S3 會傳回零件的實體標籤 (ETag) 作為回應中的標頭。您必須記錄每個上傳組件的組件編號與 ETag 值。後續的要求中必須包含這些值,才能完成分段上傳。每個部分在上傳時都會有自己的 ETag。但是,一旦多部分上傳完成並合併所有零件,所有零件都將在一個 ETag 下作為總和檢查碼的總和檢查碼。

注意

在您啟動分段上傳及上傳一或多個組件之後,您必須完成或停止分段上傳,以停止繼續收取存放已上傳組件的費用。只有在完成或停止分段上傳之後,Amazon S3 才會釋出片段儲存體,然後停止收取片段的儲存費用。

停止分段上傳之後,即無法再次使用該上傳 ID 上傳任何組件。如有任何分段上傳正在進行,在您中止上傳後仍有可能成功或失敗。若要確保釋出所有組件所使用之全部的儲存體,您必須在所有上傳組件都已完成後,再停止分段上傳。

完成分段上傳

當您完成分段上傳時,Amazon S3 會根據組件編號以遞增順序串連各個組件,建立物件。啟動分段上傳要求中若已提供任何物件中繼資料,Amazon S3 就會建立該中繼資料與物件之間的關聯性。成功完成請求之後,這些片段就不再存在。

您的完成分段上傳要求,必須包含上傳 ID 以及組件編號和相對應的 ETag 值的清單。Amazon S3 回應包含的 ETag 可識別獨特的物件資料組合。這個 ETag 不一定是物件數據的 MD5 雜湊。

分段上傳呼叫範例

對於此範例,假設您正在為 100 GB 檔案產生分段上傳。在此情況下,您會為整個程序執行以下 API 呼叫。總共會有 1002 個 API 呼叫。

分段上傳清單

您可列出特定分段上傳的組件或所有進行中之分段上傳。列出組件操作會傳回特定分段上傳之已上傳組件的資訊。Amazon S3 會為每項列出的組件要求,傳回指定分段上傳組件的資訊,上限為 1,000 個組件。若分段組件上傳中有超過 1,000 個組件,您必須傳送一連串的列出組件要求,才可擷取所有組件。請注意,傳回的組件清單不包含尚未完成之上傳的組件。使用列出分段上傳操作,即可取得正在進行中的分段上傳清單。

進行中的分段上傳是您已啟動但尚未完成或已停止的上傳。每個要求最多可傳回 1,000 個分段上傳。若正在進行超過 1,000 個的分段上傳,您必須另行傳送請求以擷取剩餘的分段上傳。傳回的清單僅用於進行驗證。傳送完成分段上傳請求時,請不要使用此清單的結果。而是在上傳 Amazon S3 傳回的組件與相對應之 ETag 值時,保有您自己的組件編號清單。

使用分段上傳操作的檢查總和

當您將物件上傳到 Amazon S3 時,可指定用於 Amazon S3 使用的檢查總和演算法。預設情況下,Amazon S3 使用 MD5 來驗證資料的完整性;但是,您可以指定使用額外的檢查總和演算法。使用 MD5 時,Amazon S3 會在上傳完成後計算整個分段上傳物件的檢查總和。此檢查總和不是整個物件的檢查總和,而是每個單獨部分檢查總和的檢查總和。

當您指示 Amazon S3 使用額外的檢查總和時,Amazon S3 會計算每個部分的檢查總和值並儲存這些值。您可以使用 API 或 SDK 搭配 GetObjectHeadObject 來找回各個部分的檢查總和。如果想要擷取分段上傳 (仍在進行中) 之個別部分的總和檢查值,您可以使用 ListParts

重要

如果您是使用額外檢查總和的分段上傳,則分段部分編號必須使用連續的部分。使用額外的檢查總和時,如果您嘗試使用非連續部分編號完成分段上傳請求,Amazon S3 會產生 HTTP 500 Internal Server Error 錯誤。

如需如何使用分段物件檢查總和的詳細資訊,請參閱「檢查物件完整性」。

並行分段上傳操作

在分散式開發環境中,您的應用程式有可能同時對相同的物件啟動數項更新。您的應用程式可能使用相同的物件金鑰,啟動數項分段上傳。然後針對這些每一個上傳,應用程式會上傳各組件,並對 Amazon S3 傳送完成上傳要求,以建立物件。當儲存貯體啟用 S3 版本控制之後,完成分段上傳一律會建立新的版本。若是未啟用版本控制的儲存貯體,在分段上傳啟動與完成之間,可能有一些收到的其他要求已先完成。

注意

在分段上傳啟動與完成之間,可能有一些收到的其他要求已先完成。例如,若在您以某個金鑰啟動分段上傳之後,其他操作卻在您完成前刪除了該金鑰,則完成分段上傳回應可能顯示物件建立成功,但您根本沒看到該物件。

分段上傳與定價

啟動分段上傳之後,Amazon S3 就會保留所有組件,直到您完成或停止上傳為止。在其整個生命週期內,您都要支付此分段上傳及其相關組件的儲存體、頻寬與要求之費用。

這些部份會根據上傳部份時指定的儲存類別收費。例外情況是部份上傳至 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive。進行 PUT 分段上傳至 S3 Glacier Flexible Retrieval 儲存體類別時,當作 S3 Glacier Flexible Retrieval 預備儲存體以 S3 標準儲存體費率計費,直到上傳完成為止。此外, CreateMultipartUpload 和 UploadPart 均以 S3 標準費率計費。只有 CompleteMultipartUpload 請求才會以 S3 Glacier 彈性擷取費率計費。同樣地,PUT 到 S3 Glacier 深層存檔儲存類別的進行中多部分部分會按 S3 標準儲存費率計費為 S3 Glacier 彈性擷取暫存,直到上傳完成為止,只需按 S3 Glacier 深度存檔費率收取 CompleteMultipartUpload請求費用。

若停止分段上傳,Amazon S3 會刪除上傳成品及所有已上傳的組件,您無須再支付它們的費用。無論指定的儲存空間類別為何,刪除不完整的分段上傳都不會收取提前刪除費用。如需定價的詳細資訊,請參閱 Amazon S3 定價

注意

為了將儲存費用降至最低,建議您使用 AbortIncompleteMultipartUpload 動作,將生命週期規則設定為在指定天數後刪除不完整的分段上傳。如需詳細了解生命週期規則的建立,以刪除不完整分段上傳,請參閱設定儲存貯體生命週期組態,刪除不完整分段上傳

分段上傳的 API 支援

這些程式庫提供高階抽象概念,讓您可以輕鬆分段上傳物件。但您可視應用程式的需求,直接使用 REST API。《Amazon Simple Storage Service API 參考》中的下列章節說明了分段上傳的 REST API。

如需使用 AWS Lambda 函數的多部分上傳逐步解說,請參閱使用多部分上傳和傳輸加速將大型物件上傳到 Amazon S3

AWS Command Line Interface 支持多部分上傳

中的下列主題 AWS Command Line Interface 說明多部分上載的作業。

AWS SDK 支持多部分上傳

您可以使用 AWS SDK 部分上傳物件。如需 API 動作支援的 AWS SDK 清單,請參閱:

分段上傳 API 與許可

您必須要有必要許可,才可使用分段上傳操作。您可以使用存取控制清單 (ACL)、儲存貯體政策或使用者政策,為個人授予執行這些操作的許可。下表列出使用 ACL、儲存貯體政策或使用者政策時,各種分段上傳操作所需的許可。

動作 必要許可

建立分段上傳

您必須有權對物件執行 s3:PutObject 動作,才可建立分段上傳。

儲存貯體擁有者可允許其他委託人執行 s3:PutObject 動作。

啟動分段上傳

您必須有權對物件執行 s3:PutObject 動作,才可啟動分段上傳。

儲存貯體擁有者可允許其他委託人執行 s3:PutObject 動作。

啟動者

識別分段上傳啟動者的容器元素。如果初始器是 AWS 帳戶,則此元素會提供與 Owner 元素相同的資訊。若啟動者是 IAM 使用者,此元素會提供使用者 ARN 與顯示名稱。

上傳片段

您必須有權對物件執行 s3:PutObject 動作,才可分段上傳。

儲存貯體擁有者必須允許啟動者對物件執行 s3:PutObject 動作,啟動者才可分段上傳該物件。

上傳片段 (複製)

您必須有權對物件執行 s3:PutObject 動作,才可分段上傳。因為您分段上傳現有物件,所以必須要能對來源物件進行 s3:GetObject

啟動者若要分段上傳該物件,儲存貯體擁有者必須允許啟動者對物件執行 s3:PutObject 動作。

完成分段上傳

您必須有權對物件執行 s3:PutObject 動作,才可完成分段上傳。

儲存貯體擁有者必須允許啟動者對物件執行 s3:PutObject 動作,啟動者才可完成該物件的分段上傳。

停止分段上傳

您必須有權對物件執行 s3:AbortMultipartUpload 動作,才可停止分段上傳。

儲存貯體擁有者和分段上傳啟動者預設都可以做為 IAM 和儲存貯體政策的一部分,來執行此動作。如果初始器是 IAM 使用者,也允許該使用者停止該分段上傳。 AWS 帳戶 使用 VPC 端點政策,分段上傳的啟動者不會自動獲得執行 s3:AbortMultipartUpload 動作的許可。

除了這些預設值之外,儲存貯體擁有者可允許其他委託人對物件執行 s3:AbortMultipartUpload 動作。儲存貯體擁有者可拒絕任何委託人執行 s3:AbortMultipartUpload 動作。

列出組件

您必須有權執行 s3:ListMultipartUploadParts 動作,才可列出分段上傳的各組件。

儲存貯體擁有者預設具備許可,可對儲存貯體列出任何分段上傳之組件。分段上傳的啟動者則有列出特定分段上傳組件的許可。如果分段上傳啟動器是 IAM 使用者,則該 IAM 使用者的 AWS 帳戶 控制項也具有列出該上傳部分的權限。

除了這些預設值之外,儲存貯體擁有者可允許其他委託人對物件執行 s3:ListMultipartUploadParts 動作。儲存貯體擁有者也可拒絕任何委託人執行 s3:ListMultipartUploadParts 動作。

列出分段上傳

您必須有權對儲存貯體執行 s3:ListBucketMultipartUploads 動作,才可列出該儲存貯體進行中的分段上傳。

除此預設值外,儲存貯體擁有者可允許其他委託人對儲存貯體執行 s3:ListBucketMultipartUploads 動作。

AWS KMS 加密和解密相關權限

若要使用 AWS Key Management Service (AWS KMS) KMS 金鑰以加密執行多部分上傳,請求者必須擁有金鑰kms:Decryptkms:GenerateDataKey動作的權限。這些許可是必要的,因為在加密檔案完成分段上傳之前,Amazon S3 必須從部分加密檔案解密並讀取資料。

如需詳細資訊,請參閱 AWS 知識中心中的使用 AWS KMS key透過加密以將大型檔案上傳至 Amazon S3

如果您的 IAM 使用者或角色與 KMS 金鑰 AWS 帳戶 相同,則您必須擁有金鑰政策的這些權限。若您的 IAM 使用者或角色屬於與 CMK 不同的帳戶,您必須同時在金鑰政策和您的 IAM 使用者或角色上具備這些許可。

如需 ACL 許可與存取原則許可之間關聯性的資訊,請參閱「ACL 許可與存取政策許可的對應」。如需 IAM 使用者、角色與最佳實務的詳細資訊,請參閱《IAM 使用者指南》中的 IAM 身分 (使用者、群組和角色)