使用 S3 複寫時間控制來滿足合規要求 - Amazon Simple Storage Service

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

使用 S3 複寫時間控制來滿足合規要求

S3 複寫時間控制 (S3 RTC) 可協助滿足資料複寫的合規性或業務要求,讓您清楚掌握 Amazon S3 複寫時間。S3 RTC 會在數秒內複寫您上傳至 Amazon S3 的多數物件,以及在 15 分鐘內複寫 99.99% 的這些物件。

S3 RTC 預設會包含兩種追蹤複寫進度的方式:

  • S3 複寫指標 - 您可以使用複寫指標來監控待複寫的 S3 API 操作總數、待複寫的物件總大小、目的地區域的複寫時間上限,以及複寫失敗的操作總數。然後,您可以監控個別複寫的每個資料集。您也可以獨立於 S3 RTC 啟用 S3 複寫指標。如需詳細資訊,請參閱使用 S3 複寫指標

    啟用具有 S3 複寫時間控制 (S3 RTC) 的複寫規則會發佈 S3 複寫指標。複寫指標可在啟用 S3 RTC 後的 15 分鐘內使用。複寫指標可透過 Amazon S3 主控台、Amazon S3 API、 AWS SDKs、 AWS Command Line Interface (AWS CLI) 和 Amazon CloudWatch 取得。如需 CloudWatch 指標的詳細資訊,請參閱使用 Amazon CloudWatch 監控指標。如需有關透過 Amazon S3 主控台檢視複寫指標的詳細資訊,請參閱檢視複寫指標

    S3 複寫指標的計費方式與 Amazon CloudWatch 自訂指標相同。如需詳細資訊,請參閱 Amazon CloudWatch 定價

  • Amazon S3 事件通知 – 如果物件複寫超過 15 分鐘閾值或在此閾值之後複寫,S3 RTC 會提供可通知儲存貯體擁有者的 OperationMissedThresholdOperationReplicatedAfterThreshold 事件。透過 S3 RTC,Amazon S3 事件可在物件未在 15 分鐘內複寫,以及這些物件在 15 分鐘閾值後複寫的罕見情況下通知您。

    複寫事件可在啟用 S3 RTC 後的 15 分鐘內使用。Amazon S3 事件通知可透過 Amazon SQS、Amazon SNS 或 取得 AWS Lambda。如需詳細資訊,請參閱使用 Amazon S3 事件通知接收複寫失敗事件

S3 RTC 的最佳實務和指導方針

在啟用 S3 複寫時間控制 (S3 RTC) 的 Amazon S3 中複寫資料時,請遵循這些最佳實務指導方針,以最佳化工作負載的複寫效能。

Amazon S3 複寫與請求率效能的指導方針

從 Amazon S3 上傳和擷取儲存時,您的應用程式可以在請求效能中實現每秒數千筆交易。例如,在 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 效能指導方針超過每秒請求數的期間。

S3 RTC SLA 也不適用複寫資料傳輸率超過預設每秒 1 Gigabit (Gbps) 配額的期間。如果預期複寫傳輸率超過 1 Gbps,您可以聯絡 AWS 支援 中心或使用 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 RTC 資料傳輸率會超過預設的 1 Gbps 配額,請聯絡 AWS 支援 中心或使用 Service Quotas 來請求增加複寫傳輸率配額。

AWS KMS 加密物件複寫請求率

當您複寫使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 進行伺服器端加密的物件時,會套用每秒 AWS KMS 請求配額。 AWS KMS 可能會拒絕其他有效的請求,因為您的請求速率超過每秒請求數的配額。當請求受到調節時, 會 AWS KMS 傳回ThrottlingException錯誤。 AWS KMS 請求率配額適用於您直接提出的請求,以及 Amazon S3 複寫代表您提出的請求。

例如,如果您預期每秒複寫 1,000 個物件,您可以從請求率配額中減去 2,000 個 AWS KMS 請求。產生的每秒請求率適用於您的 AWS KMS 工作負載,複寫除外。您可以使用 AWS KMS Amazon CloudWatch 中的請求指標來監控 上的總 AWS KMS 請求率 AWS 帳戶。

若要請求提高每秒 AWS KMS 請求配額,請聯絡 AWS 支援 中心或使用 Service Quotas

啟用 S3 複寫時間控制

您可以開始使用 S3 複寫時間控制 (S3 RTC) 搭配新的或現有的複寫規則。您可以選擇將複寫規則套用至整個儲存貯體,或套用至具有特定字首或標籤的物件。當您啟用 S3 RTC 時,也會在複寫規則上啟用 S3 複寫指標。

您可以使用 Amazon S3 主控台、Amazon S3 API、SDK 和 () 來設定 S3 RTC AWS CLI。 Amazon S3 AWS SDKs AWS Command Line Interface

主題

    如需逐步說明,請參閱 設定相同帳戶內的儲存貯體複寫。本主題提供在來源和目的地儲存貯體由相同和不同擁有時,在複寫組態中啟用 S3 RTC 的指示 AWS 帳戶。

    若要使用 AWS CLI 複寫已啟用 S3 RTC 的物件,您可以建立儲存貯體、啟用儲存貯體上的版本控制、建立 IAM 角色,讓 Amazon S3 能夠複寫物件,並將複寫組態新增至來源儲存貯體。複寫組態必須啟用 S3 RTC,如下列範例所示。

    如需使用 設定複寫組態的step-by-step說明 AWS CLI,請參閱 設定相同帳戶內的儲存貯體複寫

    下列範例複寫組態會啟用並設定複寫規則的 ReplicationTimeEventThreshold 值。啟用和設定這些值會在規則上啟用 S3 RTC。

    { "Rules": [ { "Status": "Enabled", "Filter": { "Prefix": "Tax" }, "DeleteMarkerReplication": { "Status": "Disabled" }, "Destination": { "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket", "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 複寫時間控制 (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); } }