取得複寫狀態資訊 - Amazon Simple Storage Service

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

取得複寫狀態資訊

複寫狀態可協助您判斷要複寫之物件的目前狀態。來源物件的複寫狀態將會傳回 PENDINGCOMPLETEDFAILED。複本的複寫狀態將會傳回 REPLICA

複寫狀態概觀

在複寫中,您有一個來源儲存貯體,您可以在其上設定複寫與 Amazon S3 複寫物件的目的地。當您從這些儲存貯體請求物件 (使用 GET 物件) 或物件中繼資料 (使用 HEAD 物件) 時,Amazon S3 會在回應中傳回 x-amz-replication-status 標頭:

  • 當您從來源儲存貯體請求物件時,如果請求中的物件符合複寫資格,Amazon S3 即會傳回 x-amz-replication-status 標頭。

    例如,假設您在複寫組態中指定物件前綴 TaxDocs,告知 Amazon S3 複寫僅具有金鑰名稱前綴 TaxDocs 的物件。系統會複寫您上傳且具有此金鑰名稱前綴 (例如 TaxDocs/document1.pdf) 的任何物件。針對具有此金鑰名稱前綴的物件請求,Amazon S3 會傳回 x-amz-replication-status 標頭,以及代表物件複寫狀態的下列其中一個值:PENDINGCOMPLETEDFAILED

    注意

    若物件複寫在您上傳完物件後失敗,則您無法重試複寫。您必須再次上傳物件。對於缺少複寫角色許可、 AWS KMS 許可,或儲存貯體許可等問題,物件會轉換成 FAILED 狀態。對於暫時性錯誤,例如,如果儲存貯體或區域無法使用,複寫狀態將不會轉換成 FAILED,但會保持 PENDING。資源恢復線上狀態後,S3 將繼續複寫這些物件。

  • 當您從目的地儲存貯體請求物件時,如果您請求中的物件是 Amazon S3 建立的複本,Amazon S3 會傳回值為 REPLICAx-amz-replication-status 標頭。

注意

在從已啟用複寫的來源儲存貯體中刪除物件之前,您應該先檢查物件的複寫狀態,確保已複寫物件。

如果已啟用來源儲存貯體上的生命週期組態,Amazon S3 會暫停生命週期動作,直到將物件狀態標示為 COMPLETEDFAILED 為止。

複寫至多個目的地儲存貯體時的複寫狀態

當您將物件複寫至多個目的地儲存貯體時,x-amz-replication-status 標頭的運作方式會有所不同。成功複寫至所有目的地時,來源物件的標頭只會傳回 COMPLETED 的值。標頭會保留在 PENDING 值,直到對所有目的地的複寫完成為止。如果一或多個目的地複寫失敗,標頭會傳回 FAILED

啟用 Amazon S3 複本修改同步時的複寫狀態

當您的複寫規則啟用 Amazon S3 複本修改同步時,複本可以報告 REPLICA 以外的狀態。如果中繼資料變更正在複寫過程中,則 x-amz-replication-status 標頭會傳回 PENDING。如果複本修改同步無法複寫中繼資料,則標頭會傳回 FAILED。如果中繼資料正確複寫,複本將會傳回標頭 REPLICA

尋找複寫狀態

若要取得儲存貯體中物件的複寫狀態,您可使用 Amazon S3 庫存工具。Amazon S3 會將 CSV 檔案傳送到您在庫存組態中指定的目的地儲存貯體。您也可以使用 Amazon Athena,來查詢庫存報告中的複寫狀態。如需 Amazon S3 庫存的詳細資訊,請參閱 Amazon S3 清查

您也可以使用主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDK 尋找物件複寫狀態。

在 S3 主控台中,您可以在 Object management overview (物件管理概觀) 下的物件 Details (詳細資訊) 頁面上檢視物件的複寫狀態。

  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. Buckets (儲存貯體) 清單中,選擇您的儲存貯體名稱。

  3. Objects (物件) 清單中,選擇物件名稱。

  4. Properties (屬性) 下尋找 Object management overview (物件管理概觀),您可以在這裡看到 Replication status (複寫狀態)。

使用 head-object 命令來擷取物件中繼資料,如下所示。

aws s3api head-object --bucket source-bucket --key object-key --version-id object-version-id

此命令會傳回物件中繼資料,包括 ReplicationStatus,如下列範例回應所示。

{ "AcceptRanges":"bytes", "ContentType":"image/jpeg", "LastModified":"Mon, 23 Mar 2015 21:02:29 GMT", "ContentLength":3191, "ReplicationStatus":"COMPLETED", "VersionId":"jfnW.HIMOfYiD_9rGbSkmroXsFj3fqZ.", "ETag":"\"6805f2cfc46c0f04559748bb039d69ae\"", "Metadata":{ } }

下列程式碼片段會分別取得與 AWS SDK for Java 和 AWS SDK for .NET的複寫狀態。

Java
GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest(bucketName, key); ObjectMetadata metadata = s3Client.getObjectMetadata(metadataRequest); System.out.println("Replication Status : " + metadata.getRawMetadataValue(Headers.OBJECT_REPLICATION_STATUS));
.NET
GetObjectMetadataRequest getmetadataRequest = new GetObjectMetadataRequest { BucketName = sourceBucket, Key = objectKey }; GetObjectMetadataResponse getmetadataResponse = client.GetObjectMetadata(getmetadataRequest); Console.WriteLine("Object replication status: {0}", getmetadataResponse.ReplicationStatus);