获取复制状态信息 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

获取复制状态信息

复制状态可以帮助您确定正在复制的对象的当前状态。源对象的复制状态将返回 PENDINGCOMPLETED、或 FAILED。副本的复制状态将返回 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

    注意

    如果在上传对象后对象复制失败,您无法重试复制。您必须重新上传对象。对象会因缺少复制角色权限、Amazon 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 清单

您可以使用控制台、Amazon Command Line Interface (Amazon CLI) 或 Amazon SDK 查找对象复制状态。

在 S3 控制台中,您可以在 Object management overview(对象管理概览)下的对象 Details(详细信息)页面查看对象的复制状态。

  1. 登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 存储桶列表中,请选择存储桶名称。

  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":{ } }

以下代码片段分别使用 Amazon SDK for Java 和 Amazon 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);