获取复制状态信息
复制状态可以帮助您确定正在复制的对象的当前状态。源对象的复制状态将返回 PENDING
、COMPLETED
、或 FAILED
。副本的复制状态将返回 REPLICA
。
在创建 S3 批量复制任务时,也可以使用复制状态值。例如,可以使用这些状态值来复制从未复制过或复制失败的对象。有关将这些值与批量复制结合使用的更多信息,请参阅将复制状态信息和批量复制任务结合使用。
复制状态概述
在复制中,您有一个源存储桶(对它配置复制)和一个或多个目标存储桶(Amazon S3 将对象复制到其中)。当您请求这些存储桶中的对象(使用 GetObject
)或对象元数据(使用 HeadObject
)时,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
标头:PENDING
、COMPLETED
或FAILED
。注意
如果在上传对象后对象复制失败,您无法重试复制。必须再次上传该对象,或者必须使用 S3 批量复制来复制任何失败的对象。有关使用批量复制的更多信息,请参阅使用批量复制以复制现有对象。
对象会因缺少复制角色权限、Amazon Key Management Service(Amazon KMS)权限或存储桶权限等问题而转换为
FAILED
状态。对于临时性故障(例如,在存储桶或区域不可用的情况下),复制状态将不会转换为FAILED
,而保持PENDING
。在资源重新联机后,Amazon S3 将继续复制这些对象。 -
当请求目标存储桶中的对象时,如果请求中的对象是 Amazon S3 创建的副本,Amazon S3 会返回值为
REPLICA
的x-amz-replication-status
标头。
注意
在从启用了复制的源存储桶中删除对象之前,请检查该对象的复制状态,以确保已复制了该对象。
如果对源存储桶启用了 S3 生命周期配置,则 Amazon S3 将暂停生命周期操作,直到它将对象的状态标记为 COMPLETED
或 FAILED
。
复制到多个目标存储桶时的复制状态
将对象复制到多个目标存储桶时,x-amz-replication-status
标头的作用有所不同。仅当向所有目标的复制都成功时,源对象的标头才返回 COMPLETED
值。在完成所有目标的复制之前,标头将保持 PENDING
值。如果一个或多个目标复制失败,则标头返回 FAILED
。
启用了 Amazon S3 副本修改同步时的复制状态
当您的复制规则启用了 Amazon S3 副本修改同步时,副本可能报告 REPLICA
以外的状态。如果元数据更改正在复制过程中,x-amz-replication-status
标头返回 PENDING
。如果副本修改同步无法复制元数据,则标头返回 FAILED
。如果正确复制元数据,则副本将返回标头 REPLICA
。
将复制状态信息和批量复制任务结合使用
在创建批量复制任务时,可以选择指定其它筛选条件,例如对象创建日期和复制状态,来缩小任务的范围。
您可以通过提供以下一个或多个值基于 ObjectReplicationStatuses
值筛选要复制的对象:
-
"NONE"
– 表示 Amazon S3 之前从未尝试过复制对象。 -
"FAILED"
– 表示 Amazon S3 之前尝试过,但未成功复制对象。 -
"COMPLETED"
– 表示 Amazon S3 之前已成功复制对象。 -
"REPLICA"
– 表示这是 Amazon S3 已从另一个源复制的副本对象。
有关将这些复制状态与批量复制结合使用的更多信息,请参阅分批复制任务的筛选条件。
查找复制状态
要获取存储桶中对象的复制状态,可以使用 Amazon S3 清单工具。Amazon S3 会向目标存储桶发送一个您在清单配置中指定的 CSV 文件。您还可以使用 Amazon Athena 在清单报告中查询复制状态。有关 Amazon S3 清单的更多信息,请参阅 使用 S3 清单对数据进行编目和分析。
还可以使用 Amazon S3 控制台、Amazon Command Line Interface(Amazon CLI)或 Amazon SDK 来查找对象复制状态。
在 Amazon S3 控制台中,可以在对象的详细信息页面上查看对象的复制状态。
登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择存储桶。
-
在通用存储桶列表中,选择复制源存储桶的名称。
-
在 Objects (对象) 列表中,请选择对象名称。此时将显示对象的详细信息页面。
-
在属性选项卡上,向下滚动至对象管理概述部分。在管理配置下,查看复制状态下的值。
使用以下 Amazon Command Line Interface(Amazon CLI)head-object
命令检索对象元数据,如以下示例所示。将
替换为复制源存储桶的名称,并将另一个 amzn-s3-demo-source-bucket1
替换为您自己的信息。user input
placeholders
aws s3api head-object --bucket
amzn-s3-demo-source-bucket1
--keyobject-key
--version-idobject-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 获取复制状态。