本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 S3 複寫時間控制滿足合規要求
S3 複寫時間控制 (S3RTC) 可協助您符合資料複寫的合規或業務需求,並提供 Amazon S3 複寫時間的可見性。S3 會在幾秒鐘內RTC複寫您上傳至 Amazon S3 的大多數物件,並在 15 分鐘內複寫其中 99.99% 的物件。
根據預設,S3 RTC包含兩種追蹤複寫進度的方式:
-
S3 複寫指標 – 您可以使用 S3 複寫指標來監控待處理複寫的 S3 API操作總數、待處理複寫的物件總大小、目的地區域的複寫時間上限,以及失敗複寫的操作總數。然後,您可以監控個別複寫的每個資料集。您也可以獨立於 S3 啟用 S3 複寫指標RTC。如需詳細資訊,請參閱使用 S3 複寫指標。
啟用 S3 複寫時間控制 (S3RTC) 的複寫規則發佈 S3 複寫指標。複寫指標可在啟用 S3 的 15 分鐘內使用RTC。複寫指標可透過 Amazon S3 主控台、Amazon S3API、 AWS SDKs、 AWS Command Line Interface (AWS CLI) 和 Amazon 取得 CloudWatch。如需 CloudWatch 指標的詳細資訊,請參閱 使用 Amazon 監控指標 CloudWatch。如需透過 Amazon S3 主控台檢視複寫指標的詳細資訊,請參閱 檢視複寫指標。
S3 複寫指標的計費費率與 Amazon CloudWatch 自訂指標相同。如需詳細資訊,請參閱 Amazon CloudWatch 定價
。 -
Amazon S3 事件通知 – S3 RTC提供
OperationMissedThreshold
和OperationReplicatedAfterThreshold
事件,在物件複寫超過 15 分鐘閾值或超過閾值後發生時通知儲存貯體擁有者。使用 S3 時RTC,Amazon S3 事件通知可以在極少數執行個體中通知您物件未在 15 分鐘內複寫,以及這些物件在 15 分鐘閾值後複寫。複寫事件會在啟用 S3 的 15 分鐘內提供RTC。Amazon S3 事件通知可透過 Amazon SQS、Amazon SNS或 取得 AWS Lambda。如需詳細資訊,請參閱使用 Amazon S3 事件通知接收複寫失敗事件。
S3 的最佳實務和指導方針 RTC
在啟用 Amazon S3 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 GB (Gbps) 配額的期間內,S3 RTCSLA也不適用。如果您預期複寫傳輸速率超過 1 Gbps,您可以聯絡 AWS Support 中心
預估您的複寫請求率
您的總請求速率,包括 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 中FAQs有關複寫
超過 S3 RTC資料傳輸率配額
如果您預期 S3 RTC資料傳輸速率超過預設的 1 Gbps 配額,請聯絡 AWS Support 中心
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 Support 中心
啟用 S3 複寫時間控制
您可以開始將 S3 複寫時間控制 (S3RTC) 與新的或現有的複寫規則搭配使用。您可以選擇將複寫規則套用至整個儲存貯體,或套用至具有特定字首或標籤的物件。當您啟用 S3 時RTC,您的複寫規則也會啟用 S3 複寫指標。
您可以使用 RTC Amazon S3 主控台、Amazon S3 、 和 () 來設定 S3 AWS CLI。 Amazon S3 API AWS SDKs AWS Command Line Interface
主題
如需 step-by-step指示,請參閱 為相同帳戶中的儲存貯體設定複寫。本主題提供當來源和目的地儲存貯體由相同和不同的 擁有時,在複寫組態RTC中啟用 S3 的指示 AWS 帳戶。
若要使用 AWS CLI 複寫RTC已啟用 S3 的物件,您可以建立儲存貯體、在儲存貯體上啟用版本控制、建立角色IAM,讓 Amazon S3 能夠複寫物件,並將複寫組態新增至來源儲存貯體。複寫組態必須RTC啟用 S3,如下列範例所示。
如需 step-by-step使用 設定複寫組態的指示 AWS CLI,請參閱 為相同帳戶中的儲存貯體設定複寫。
下列範例複寫組態會啟用和設定複寫規則的 ReplicationTime
和 EventThreshold
值。啟用和設定這些值會在規則RTC上啟用 S3。
{ "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:Minutes
和 ReplicationTime:Time:Minutes
只能將 15
作為有效值。
下列 Java 範例會在啟用 S3 複寫時間控制 (S3RTC) 的情況下新增複寫組態。
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); } }