使用 S3 Replication Time Control(S3 RTC)满足合规性要求 - Amazon Simple Storage Service

使用 S3 Replication Time Control(S3 RTC)满足合规性要求

S3 Replication Time Control(S3 RTC)可以帮助您满足数据复制的合规性要求或业务要求,并提供对 Amazon S3 复制时间的可见性。S3 RTC 会在几秒钟内复制您上传到 Amazon S3 的大多数对象,并在 15 分钟内复制 99.99% 的对象。

默认情况下,S3 RTC 包括 S3 复制指标和 Amazon S3 事件通知,您可以使用它们来监控待复制的 S3 API 操作的总数、待复制对象的总大小以及最大复制时间。您可以独立于 S3 RTC 启用复制指标。有关更多信息,请参阅使用复制指标监控进度。此外,S3 RTC 还提供 OperationMissedThresholdOperationReplicatedAfterThreshold 事件,如果对象复制超过或在 15 分钟阈值后复制,这些事件会通知存储桶拥有者。

借助 S3 RTC,当对象在 15 分钟内未复制(这种情况很罕见)以及当这些对象在 15 分钟阈值之后复制时,Amazon S3 事件可以通知您。Amazon S3 事件可通过 Amazon SQS、Amazon SNS 或 AWS Lambda 获取。有关更多信息,请参阅 Amazon S3 事件通知

S3 Replication Time Control

您可以基于新的或现有的复制规则开始使用 S3 Replication Time Control(S3 RTC)。您可以选择将复制规则应用于整个 S3 存储桶,或应用于具有特定前缀或标签的 Amazon S3 对象。启用 S3 RTC 时,复制指标也会在复制规则上启用。

如果您使用的是最新版本的复制配置(即在复制配置规则中指定 Filter 元素),默认情况下,Amazon S3 不会复制该删除标记。但是,您可以将删除标记复制添加到非基于标记的规则。

注意

复制指标的计费费率与 Amazon CloudWatch 自定义指标的费率相同。有关信息,请参阅 Amazon CloudWatch 定价

有关使用 S3 RTC 创建规则的更多信息,请参阅启用 S3 Replication Time Control(S3 RTC)

使用 S3 RTC 的复制指标

启用了 S3 Replication Time Control(S3 RTC)的复制规则可发布复制指标。对于复制指标,您可以监控等待复制的 S3 API 操作的总数、等待复制的对象的总大小、到目标区域的最长复制时间以及复制失败的操作总数。然后,您可以监控单独复制的每个数据集。

复制指标在启用 S3 RTC 之后的 15 分钟内可用。复制指标可通过 Amazon S3 控制台Amazon S3 API、AWS SDK、AWS Command Line Interface (AWS CLI)Amazon CloudWatch 提供。有关更多信息,请参阅 使用 Amazon CloudWatch 监控指标

有关通过 Amazon S3 控制台查找复制指标的更多信息,请参阅使用 Amazon S3 控制台查看复制指标

使用 Amazon S3 事件通知跟踪复制对象

您可以通过监控 S3 Replication Time Control(S3 RTC)发布的特定事件通知来跟踪 15 分钟内未复制的对象的复制时间。当有资格使用 S3 RTC 进行复制的对象在 15 分钟内未复制以及当这些对象在 15 分钟阈值之后复制时,会发布这些事件。

复制事件在启用 S3 RTC 之后的 15 分钟内可用。Amazon S3 事件可通过 Amazon SQS、Amazon SNS 或 AWS Lambda 获取。有关更多信息,请参阅 Amazon S3 事件通知

S3 RTC 的最佳实践和准则

在 Amazon S3 中使用 S3 Replication Time Control(S3 RTC)复制数据时,请遵循这些最佳实践准则为您的工作负载优化复制性能。

Amazon S3 复制和请求速率性能准则

当从 Amazon S3 上传和检索存储时,您的应用程序可以实现每秒数千个事务的请求性能。例如,应用程序在 S3 存储桶中每个前缀每秒可实现至少 3,500 个 PUT/COPY/POST/DELETE 请求或 5,500 个 GET/HEAD 请求,包括 S3 复制代表您发出的请求。对存储桶中的前缀数量没有限制。您可以通过并行读取来增加读取或写入性能。例如,如果您在 S3 存储桶中创建 10 个前缀以并行处理读取,则可以将读取性能扩展到每秒 55,000 个读取请求。

Amazon S3 根据高于这些准则的持续请求速率或与 LIST 请求并行的持续请求速率自动扩展。尽管 Amazon S3 在内部针对新的请求速率进行优化,但您可能暂时会收到 HTTP 503 请求响应,直至优化完成。随着每秒请求速率增大,或者当您首次启用 S3 RTC 时,可能会发生这种情况。在这些期间,您的复制延迟可能会增加。S3 RTC 服务等级协议 (SLA) 不适用于超出 Amazon S3 每秒请求性能准则的时间段。

在复制数据传输速率超过默认 1 Gbps 限制的时间段内,S3 RTC SLA 也不适用。如果您预计复制传输速率超过 1 Gbps,则可以联系 AWS Support 中心或使用 Service Quotas 来请求提高限制。

估算您的复制请求速率

您的总请求速率(包括代表您发出的 Amazon S3 复制请求)不得超出复制源存储桶和目标存储桶的 Amazon S3 请求速率准则。对于已复制的每个对象,Amazon S3 复制向源存储桶发出最多五个 GET/HEAD 请求和一个 PUT 请求,向每个目标存储桶发出一个 PUT 请求。

例如,如果您希望每秒复制 100 个对象,则 Amazon S3 复制可能会代表您执行额外 100 个 PUT 请求,每秒总计向源 S3 存储桶发出 200 个 PUT 请求。Amazon S3 复制也可能最多执行 500 个 GET/HEAD 请求(每个已复制的对象有 5 个 GET/HEAD 请求)。

注意

每个已复制的对象只会产生一个 PUT 请求的费用。有关更多信息,请参阅 Amazon S3 复制常见问题解答中的定价信息。

超过 S3 RTC 数据传输速率限制

如果您预计 S3 Replication Time Control 数据传输速率超过默认的 1Gbps 限制,请联系 AWS Support 中心或使用服务限额请求提高限制。

AWS KMS 加密对象复制请求速率

当您使用 Amazon S3 复制来复制通过服务器端加密 (SSE-KMS) 加密的对象时,AWS Key Management Service (AWS KMS) 每秒请求限制适用。因为您的请求速率超过了每秒请求数的限制,AWS KMS 可能会拒绝其他有效的请求。如果请求受到限制,AWS KMS 将返回 ThrottlingException 错误。AWS KMS 请求速率限制适用于您直接发出的请求和代表您通过 Amazon S3 复制发出的请求。

例如,如果您希望每秒复制 1,000 个对象,则可以从 AWS KMS 请求速率限制中减去 2,000 个请求。生成的每秒请求速率可用于除复制之外的 AWS KMS 工作负载。您可以使用 Amazon CloudWatch 中的 AWS KMS 请求指标来监控AWS 账户的总 AWS KMS 请求速率。

启用 S3 Replication Time Control(S3 RTC)

S3 Replication Time Control(S3 RTC)可以帮助您满足数据复制的合规性要求或业务要求,并提供对 Amazon S3 复制时间的可见性。S3 RTC 会在几秒钟内复制您上传到 Amazon S3 的大多数对象,并在 15 分钟内复制 99.99% 的对象。

借助 S3 RTC,您可以监控等待复制的对象总数和大小,以及到目标区域的最长复制时间。复制指标可通过AWS Management ConsoleAmazon CloudWatch 用户指南获得。有关更多信息,请参阅 CloudWatch 中的 S3 复制指标

主题

    如需分步指导,请参阅 为同一账户拥有的源存储桶和目标存储桶配置复制。本主题提供了在两个存储桶由相同和不同的 AWS 账户 拥有时在复制配置中启用 S3 RTC 的说明。

    要在启用 S3 RTC 的情况下使用 AWS CLI 复制对象,您需要创建存储桶,对存储桶启用版本控制,创建一个 IAM 角色(该角色向 Amazon S3 赋予复制对象的权限),并将复制配置添加到源存储桶。复制配置需要启用 S3 Replication Time Control(S3 RTC)。

    在已启用 S3 RTC 的情况下进行复制 (AWS CLI)
    • 以下示例设置 ReplicationTimeMetric,并将复制配置添加到源存储桶。

      { "Rules": [ { "Status": "Enabled", "Filter": { "Prefix": "Tax" }, "DeleteMarkerReplication": { "Status": "Disabled" }, "Destination": { "Bucket": "arn:aws:s3:::destination", "Metrics": { "Status": "Enabled", "EventThreshold": { "Minutes": 15 } }, "ReplicationTime": { "Status": "Enabled", "Time": { "Minutes": 15 } } }, "Priority": 1 } ], "Role": "IAM-Role-ARN" }
      重要

      Metrics:EventThreshold:MinutesReplicationTime:Time:Minutes 只能设置为 15 作为有效值。

    下面是使用 S3 Replication Time Control(S3 RTC)添加复制配置的 Java 示例。

    import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.model.DeleteMarkerReplication; import software.amazon.awssdk.services.s3.model.Destination; import software.amazon.awssdk.services.s3.model.Metrics; import software.amazon.awssdk.services.s3.model.MetricsStatus; import software.amazon.awssdk.services.s3.model.PutBucketReplicationRequest; import software.amazon.awssdk.services.s3.model.ReplicationConfiguration; import software.amazon.awssdk.services.s3.model.ReplicationRule; import software.amazon.awssdk.services.s3.model.ReplicationRuleFilter; import software.amazon.awssdk.services.s3.model.ReplicationTime; import software.amazon.awssdk.services.s3.model.ReplicationTimeStatus; import software.amazon.awssdk.services.s3.model.ReplicationTimeValue; public class Main { public static void main(String[] args) { S3Client s3 = S3Client.builder() .region(Region.US_EAST_1) .credentialsProvider(() -> AwsBasicCredentials.create( "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY") ) .build(); ReplicationConfiguration replicationConfig = ReplicationConfiguration .builder() .rules( ReplicationRule .builder() .status("Enabled") .priority(1) .deleteMarkerReplication( DeleteMarkerReplication .builder() .status("Disabled") .build() ) .destination( Destination .builder() .bucket("destination_bucket_arn") .replicationTime( ReplicationTime.builder().time( ReplicationTimeValue.builder().minutes(15).build() ).status( ReplicationTimeStatus.ENABLED ).build() ) .metrics( Metrics.builder().eventThreshold( ReplicationTimeValue.builder().minutes(15).build() ).status( MetricsStatus.ENABLED ).build() ) .build() ) .filter( ReplicationRuleFilter .builder() .prefix("testtest") .build() ) .build()) .role("role_arn") .build(); // Put replication configuration PutBucketReplicationRequest putBucketReplicationRequest = PutBucketReplicationRequest .builder() .bucket("source_bucket") .replicationConfiguration(replicationConfig) .build(); s3.putBucketReplication(putBucketReplicationRequest); } }

    有关更多信息,请参阅 使用 S3 Replication Time Control(S3 RTC)满足合规性要求