디렉터리 버킷의 객체에 데이터 추가하기
디렉터리 버킷의 객체에 데이터 추가하기 (Appending data to objects in directory buckets)
디렉터리 버킷에 S3 Express One Zone 스토리지 클래스로 저장된 기존 객체의 끝에 데이터를 추가할 수 있어요. 데이터가 일정 기간 동안 계속해서 쓰여지거나, 객체에 쓰는 동안 그 객체를 읽어야 할 때 데이터 추가 기능을 사용하는 것을 권장해요. 로그 파일에 새 로그 항목을 덧붙이거나, 트랜스코딩 후 스트리밍되는 비디오 파일에 새 세그먼트를 추가하는 것 같은 사용 사례에서 흔히 쓰여요. 이렇게 객체에 데이터를 추가하면, 이전에는 로컬 저장소에 데이터를 합친 뒤 최종 객체를 Amazon S3에 복사하던 애플리케이션을 단순하게 만들 수 있어요.
출처: 문서
본문
객체에 추가할 수 있는 데이터에는 최소 크기 제한이 없어요. 다만 한 번의 요청으로 객체에 추가할 수 있는 데이터의 최대 크기는 5GB예요. 이는 Amazon S3 API로 데이터를 업로드할 때의 최대 요청 크기와 같은 제한이에요.
추가(append) 작업이 성공할 때마다 객체의 파트(part)가 하나씩 만들어지고, 객체 하나는 최대 10,000개의 파트를 가질 수 있어요. 즉 객체에 최대 10,000번까지 데이터를 추가할 수 있답니다. 객체가 S3 멀티파트 업로드로 만들어진 경우, 업로드된 각 파트도 총 10,000개 파트 한도에 포함돼요. 예를 들어 1,000개 파트로 만들어진 멀티파트 업로드 객체에는 최대 9,000번까지 추가할 수 있어요.
참고
파트 한도에 도달하면
TooManyParts오류가 발생해요.CopyObjectAPI를 사용하면 파트 수를 초기화할 수 있어요.
객체에 파트를 병렬로 업로드하고 싶고, 업로드되는 동안 그 파트를 읽을 필요가 없다면 Amazon S3 멀티파트 업로드를 사용하는 것을 권장해요. 자세한 내용은 멀티파트 업로드 사용하기 를 참고하세요.
데이터 추가는 디렉터리 버킷에서 S3 Express One Zone 스토리지 클래스로 저장된 객체에만 지원돼요. S3 Express One Zone에 대한 자세한 내용은 S3 Express One Zone 시작하기 를 참고하세요.
디렉터리 버킷에서 객체에 데이터 추가를 시작하려면 AWS SDK, AWS CLI, PutObject API를 사용할 수 있어요. PutObject 요청을 보낼 때는 x-amz-write-offset-bytes 헤더를 추가하려는 객체의 크기로 설정해요. PutObject API 작업을 사용하려면 먼저 CreateSession API로 디렉터리 버킷의 객체에 접근하기 위한 임시 보안 자격 증명을 만들어야 해요. 자세한 내용은 Amazon S3 API Reference의 PutObject 와 CreateSession 을 참고하세요.
추가 작업이 성공할 때마다 PutObject 요청 하나로 과금돼요. 가격에 대한 자세한 내용은 Amazon S3 요금 을 참고하세요.
참고
Mountpoint for Amazon S3는 1.12 릴리스부터 S3 Express One Zone에 저장된 객체에 데이터 추가를 지원해요. 시작하려면
--incremental-upload플래그를 설정해 옵트인(opt-in)해야 해요. Mountpoint에 대한 자세한 내용은 Mountpoint 사용하기 를 참고하세요.
추가 데이터를 업로드할 때 CRC(Cyclic Redundancy Check) 알고리즘을 사용하면 HeadObject나 GetObject 요청으로 전체 객체의 CRC 기반 체크섬을 조회할 수 있어요. SHA-1이나 SHA-256 알고리즘을 사용하면, 이전 PutObject 응답에서 반환된 SHA 체크섬을 이용해 추가된 파트의 체크섬을 조회하고 무결성을 검증할 수 있어요. 자세한 내용은 데이터 보호 및 암호화 를 참고하세요.
AWS CLI, AWS SDK, REST API로 객체에 데이터 추가하기
AWS CLI, AWS SDK, REST API를 사용해 객체에 데이터를 추가할 수 있어요.
다음 put-object 예제 명령은 AWS CLI로 객체에 데이터를 추가하는 방법을 보여줘요. 실행 시 사용자 입력 자리표시자는 직접 채워 넣어야 합니다.
aws s3api put-object --bucket amzn-s3-demo-bucket--azid--x-s3 --key sampleinput/file001.bin --body bucket-seed/file001.bin --write-offset-bytes size-of-sampleinput/file001.bin
AWS SDK for Java로 객체에 데이터를 추가할 수 있어요.
var putObjectRequestBuilder = PutObjectRequest.builder()
.key(key)
.bucket(bucketName)
.writeOffsetBytes(9);
var response = s3Client.putObject(putObjectRequestBuilder.build());
s3.put_object(Bucket='amzn-s3-demo-bucket--use2-az2--x-s3', Key='2024-11-05-sdk-test', Body=b'123456789', WriteOffsetBytes=9)
REST 요청을 보내 객체에 데이터를 추가할 수도 있어요. 자세한 내용은 PutObject 를 참고하세요.