S3 Replication Time Control을 사용하여 규정 준수 요구 사항 충족
S3 Replication Time Control(S3 RTC)은 데이터 복제와 관련된 규정 준수 요구 사항이나 비즈니스 요구 사항을 충족할 수 있도록 지원하며 Amazon S3 복제 활동에 대한 가시성을 제공합니다. S3 RTC는 Amazon S3에 업로드하는 대부분의 객체를 몇 초 만에 복제하고 이러한 객체의 99.99%를 15분 내에 복제합니다.
기본적으로 S3 RTC에는 복제 진행 상황을 추적하는 2가지 방법이 있습니다.
-
S3 복제 지표 – S3 복제 지표를 사용하여 복제 대기 중인 총 S3 API 작업 수, 복제 대기 중인 객체의 총 크기, 대상 리전으로의 최대 복제 시간, 복제에 실패한 총 작업 수를 모니터링할 수 있습니다. 그런 다음 별도로 복제하는 각 데이터 세트를 모니터링할 수 있습니다. S3 RTC와 독립적으로 S3 복제 지표를 활성화할 수도 있습니다. 자세한 내용은 S3 복제 지표 사용 단원을 참조하십시오.
S3 Replication Time Control(S3 RTC)이 활성화된 복제 규칙은 S3 복제 지표를 게시합니다. 복제 지표는 S3 RTC를 사용 설정한 후 15분 이내에 사용할 수 있습니다. 복제 지표는 Amazon S3 콘솔, Amazon S3 API, AWS SDK, AWS Command Line Interface(AWS CLI), Amazon CloudWatch를 통해 사용할 수 있습니다. CloudWatch 지표에 대한 자세한 내용은 Amazon CloudWatch를 사용한 지표 모니터링 섹션을 참조하세요. Amazon S3 콘솔을 통해 복제 지표를 보는 방법에 대한 자세한 내용은 복제 지표 보기 섹션을 참조하세요.
S3 복제 지표는 Amazon CloudWatch 사용자 지정 지표와 동일한 요금으로 청구됩니다. 자세한 내용은 Amazon CloudWatch 요금
을 참조하십시오. -
Amazon S3 이벤트 알림 - S3 RTC는 객체 복제가 15분의 임계값을 초과하거나 초과 후에 이루어지는 경우 버킷 소유자에게 알리는
OperationMissedThreshold
및OperationReplicatedAfterThreshold
이벤트를 제공합니다. S3 RTC의 경우, Amazon S3 이벤트 알림은 드물지만 객체가 15분 이내에 복제되지 않는 경우와 해당 객체가 15분의 임계값 이후에 복제되는 경우를 알려줄 수 있습니다.복제 지표는 S3 RTC를 사용 설정한 후 15분 이내에 사용할 수 있습니다. Amazon S3 이벤트 알림은 Amazon SQS, Amazon SNS 또는 AWS Lambda를 통해 제공됩니다. 자세한 내용은 Amazon S3 이벤트 알림을 사용하여 복제 실패 이벤트 수신 단원을 참조하십시오.
S3 RTC에 대한 모범 사례 및 지침
S3 Replication Time Control(S3 RTC)을 활성화한 상태에서 Amazon S3에서 데이터를 복제할 때는 다음 모범 사례 지침을 따라 워크로드에 맞게 복제 성능을 최적화하세요.
Amazon S3 복제 및 요청 처리 성능 지침
애플리케이션은 Amazon S3에서 스토리지를 업로드하고 검색할 때 요청 성능에서 초당 수천 회의 트랜잭션을 구현할 수 있습니다. 예를 들어, 애플리케이션은 S3 복제가 사용자를 대신해서 수행하는 요청을 포함하여 S3 버킷의 접두사에 대해 초당 3,500개 이상의 PUT
/COPY
/POST
/DELETE
또는 초당 5,500개 이상의 GET
/HEAD
요청을 달성할 수 있습니다. 버킷의 접두사 수에는 제한이 없습니다. 읽기를 병렬화하여 읽기 또는 쓰기 성능을 향상시킬 수 있습니다. 예를 들어, S3 버킷에서 접두사 10개를 만들어 읽기를 병렬화하는 경우 읽기 성능을 초당 읽기 요청 55,000개로 조정할 수 있습니다.
Amazon S3는 이러한 지침을 초과하는 연속 요청 빈도 또는 LIST
요청과 동시에 이루어지는 연속 요청 빈도에 따라 자동으로 스케일 인됩니다. Amazon S3가 새로운 요청 빈도에 대해 내부적으로 최적화하는 동안 최적화가 완료될 때까지 일시적으로 HTTP 503 요청 응답을 받을 수 있습니다. 이 동작은 초당 요청 빈도가 증가하거나 S3 RTC를 처음 활성화할 때 발생할 수 있습니다. 이 기간 동안 복제 지연 시간이 증가할 수 있습니다. 초당 요청에 대한 Amazon S3 성능 지침이 초과되는 기간에는 S3 RTC SLA(서비스 수준 계약)가 적용되지 않습니다.
또한, 복제 데이터 전송 속도가 기본 초당 1기가비트(Gbps) 할당량을 초과하는 기간에는 S3 RTC SLA가 적용되지 않습니다. 복제 전송 속도가 1Gbps를 초과할 것으로 예상되는 경우 AWS Support Center
복제 요청 속도 추정
사용자를 대신하여 Amazon S3 복제가 수행하는 요청을 포함한 총 요청 빈도는 복제 소스 및 대상 버킷 모두에 대한 Amazon S3 요청 빈도 지침 내에 있어야 합니다. 복제된 각 객체에 대해 Amazon S3 복제는 소스 버킷에 최대 5개의 GET
/HEAD
요청과 1개의 PUT
요청을, 각 대상 버킷에 1개의 PUT
요청을 수행합니다.
예를 들어, 초당 100개의 객체를 복제하려는 경우 Amazon S3 복제는 소스 S3 버킷에 대해 초당 총 200개의 PUT
요청에 추가로 100개의 PUT
요청을 사용자 대신 수행할 수 있습니다. 또한, Amazon S3 복제는 최대 500개의 GET
/HEAD
요청을 수행할 수 있습니다(복제되는 각 객체에 대해 5개의 GET
/HEAD
요청)
참고
복제된 객체당 하나의 PUT
요청에만 비용이 발생합니다. 자세한 내용은 복제 관련 Amazon S3 FAQ
S3 RTC 데이터 전송 속도 할당량 초과
S3 RTC 데이터 전송 속도가 기본 1Gbps 할당량을 초과할 것으로 예상되는 경우 AWS Support Center
AWS KMS 암호화된 객체 복제 요청 속도
AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화로 암호화(SSE-KMS)된 객체를 복제할 때 초당 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 요청 속도를 모니터링할 수 있습니다.
초당 AWS KMS 요청 할당량 증가를 요청하려면 AWS Support Center
S3 Replication Time Control 사용 설정
먼저 S3 Replication Time Control(S3 RTC)을 새 복제 규칙 또는 기존 복제 규칙과 함께 사용할 수 있습니다. 복제 규칙을 전체 버킷에 적용하거나 특정 접두사 또는 태그가 있는 객체에 적용하도록 선택할 수 있습니다. S3 RTC를 활성화하면 복제 규칙에서도 S3 복제 지표가 활성화됩니다.
Amazon S3 콘솔, Amazon S3 API, AWS SDK, AWS Command Line Interface(AWS CLI)를 사용하여 S3 RTC를 구성할 수 있습니다.
주제
단계별 지침은 동일한 계정에서 버킷 복제 구성단원을 참조하세요. 이 주제에서는 소스 및 대상 버킷을 동일하거나 서로 다른 AWS 계정이 소유한 경우에 복제 구성에서 S3 RTC를 활성화하는 지침을 제공합니다.
AWS CLI를 사용하여 S3 RTC가 사용 설정된 객체를 복제하려면 버킷을 생성하고 버킷에서 버전 관리를 사용하며 객체를 복제할 권한을 Amazon S3에 부여하는 IAM 역할을 생성하고 복제 구성을 소스 버킷에 추가합니다. 다음 예제와 같이 복제 구성에 S3 RTC가 활성화되어 있어야 합니다.
AWS CLI를 사용하여 복제 구성을 설정하는 방법에 대한 단계적 지침은 동일한 계정에서 버킷 복제 구성 섹션을 참조하세요.
다음 예제 복제 구성은 복제 규칙의 ReplicationTime
및 EventThreshold
값을 활성화하고 설정합니다. 이 값을 활성화하고 설정하면 규칙에서 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:Minutes
및 ReplicationTime:Time:Minutes
는 유효한 값으로 15
만 가질 수 있습니다.
다음 Java 예제에서는 S3 Replication Time Control(S3 RTC)을 활성화한 복제 구성을 추가합니다.
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); } }