멀티파트 업로드 프로세스를 사용하면 단일 객체를 여러 부분의 집합으로 업로드할 수 있습니다. 각 부분은 객체 데이터의 연속적인 부분입니다. 이러한 객체 부분은 독립적으로 그리고 임의의 순서로 업로드할 수 있습니다. 부분의 전송이 실패할 경우 다른 부분에 영향을 주지 않고도 해당 부분을 재전송할 수 있습니다. 객체의 모든 부분이 업로드되면 Amazon S3가 이들 부분을 수집하여 객체를 생성합니다. 일반적으로 객체 크기가 100MB에 근접할 경우, 단일 작업에서 객체를 업로드하는 대신 멀티파트 업로드 사용을 고려해 봐야 합니다.
멀티파트 업로드 사용은 다음 이점을 제공합니다.
-
개선된 처리량 개선 - 부분을 병렬적으로 업로드하여 처리량을 개선할 수 있습니다.
-
네트워크 문제로부터 빠른 복구 - 더 작아진 부분 크기는 네트워크 오류로 인해 실패한 업로드 재시작의 영향을 최소화합니다.
-
객체 업로드 일시 중지 및 재개 – 객체 부분을 장시간에 걸쳐 업로드할 수 있습니다. 멀티파트 업로드가 시작되면 만료 날짜가 없습니다. 멀티파트 업로드를 명시적으로 완료하거나 중단해야 합니다.
-
최종 객체 크기를 알기 전에 업로드를 시작 – 객체를 생성하는 동안 업로드할 수 있습니다.
다음 방법으로 멀티파트 업로드를 사용하는 것이 좋습니다.
-
안정적인 높은 대역폭 네트워크를 통해 큰 객체를 업로드하는 경우, 멀티파트 업로드를 사용하여 멀티 스레드 성능을 위해 여러 객체 부분을 동시에 업로드함으로써 대역폭 사용을 극대화합니다.
-
불규칙한 네트워크를 통해 업로드하는 경우, 멀티파트 업로드를 사용하여 업로드가 다시 시작되는 것을 방지하여 네트워크 오류에 대한 복원력을 높입니다. 멀티파트 업로드를 사용하는 경우, 업로드 중에 중단된 부분만 다시 업로드해야 합니다. 객체 업로드를 처음부터 다시 시작하지 않아도 됩니다.
멀티파트 업로드를 사용하여 디렉터리 버킷의 Amazon S3 Express One Zone 스토리지 클래스에 객체를 업로드하는 경우, 멀티파트 업로드 프로세스는 멀티파트 업로드를 사용하여 범용 버킷에 객체를 업로드하는 프로세스와 유사합니다. 하지만 몇 가지 큰 차이가 있습니다.
멀티파트 업로드를 사용하여 S3 Express One Zone에 객체를 업로드하는 방법에 대한 자세한 정보는 다음 주제를 참조하세요.
멀티파트 업로드 프로세스
멀티파트 업로드는 다음과 같은 3단계 프로세스입니다.
-
업로드를 시작합니다.
-
객체 부분을 업로드합니다.
-
부분을 모두 업로드한 후 멀티파트 업로드를 완료합니다.
Amazon S3에 멀티파트 업로드 완료 요청이 전송되면 버킷의 다른 객체와 같이 이 객체에 액세스할 수 있도록 업로드된 각 부분을 모아 완전한 객체를 구성합니다.
멀티파트 업로드 시작
멀티파트 업로드 시작 요청을 전송하면 Amazon S3는 멀티파트 업로드에 대한 고유 식별자인 업로드 ID와 함께 응답을 반환합니다. 파트 업로드, 부분 목록 확인, 업로드 완료 또는 업로드 중단 요청 시 항상 이 업로드 ID를 포함해야 합니다.
파트 업로드
부분을 업로드할 때 업로드 ID와 함께 부분 번호를 지정해야 합니다. S3 Express One Zone에서 멀티파트 업로드를 사용하는 경우 멀티파트의 부분 번호는 연속된 번호여야 합니다. 연속되지 않는 부분 번호로 멀티파트 업로드 요청을 완료하려고 하면 HTTP 400 Bad Request
(유효하지 않은 부분 순서) 오류가 생성됩니다.
부분 번호를 사용하여 업로드하는 객체에서 각 부분과 그 위치를 고유하게 식별합니다. 이전에 업로드한 부분과 동일한 부분 번호로 새 부분을 업로드할 경우 이전에 업로드한 부분을 덮어쓰게 됩니다.
부분을 업로드할 때마다 Amazon S3는 그 응답으로 엔터티 태그(ETag) 헤더를 반환합니다. 각 부분 업로드에 대해 부분 번호와 ETag 값을 기록해야 합니다. 모든 객체 파트 업로드의 ETag 값은 동일하게 유지되지만 각 파트에는 다른 파트 번호가 할당됩니다. 이후 멀티파트 업로드를 완료하기 위한 요청에 이러한 값을 포함해야 하기 때문입니다.
Amazon S3는 S3 버킷에 업로드되는 모든 새 객체를 자동으로 암호화합니다. 멀티파트 업로드를 수행할 때 요청에서 암호화 정보를 지정하지 않은 경우 업로드된 파트의 암호화 설정이 대상 버킷의 기본 암호화 구성으로 설정됩니다. Amazon S3 버킷의 기본 암호화 구성은 항상 활성화되어 있으며, 최소한 Amazon S3 관리형 키를 통한 서버 측 암호화(SSE-S3)로 설정되어 있습니다. 디렉터리 버킷의 경우 SSE-S3 및 AWS KMS 키를 통한 서버 측 암호화(SSE-KMS)가 지원됩니다. 자세한 내용은 S3 Express One Zone의 데이터 보호 및 암호화 단원을 참조하십시오.
멀티파트 업로드 완료
멀티파트 업로드를 완료하면 Amazon S3는 부분 번호를 바탕으로 오름차순으로 각 부분을 결합하여 객체를 완성합니다. 성공적으로 완료 요청이 수행되면 부분은 더 이상 존재하지 않습니다.
멀티파트 업로드 완료 요청에는 업로드 ID와 각 부분 번호 및 해당 ETag 값의 목록이 포함되어야 합니다. Amazon S3 응답에는 결합된 객체 데이터를 고유하게 식별하는 ETag가 포함됩니다. 이 ETag는 객체 데이터의 MD5 해시가 아닙니다.
멀티파트 업로드 나열
특정 멀티파트 업로드 또는 진행 중인 모든 멀티파트 업로드에 대해 부분 목록을 확인할 수 있습니다. 부분 목록 조회 작업은 특정 멀티파트 업로드에 대해 업로드한 부분의 정보를 반환합니다. 각 부분 목록 조회 요청에 대해 Amazon S3는 특정 멀티파트 업로드에서 최대 1,000개의 부분에 대해 부분 정보를 반환합니다. 멀티파트 업로드에서 파트가 1,000개 이상일 경우 모든 파트를 검색하려면 페이지 매김을 사용해야 합니다.
반환된 부분 목록에는 업로드가 완료되지 않은 부분이 포함되지 않습니다. 멀티파트 업로드 나열 작업을 사용하여 진행 중인 멀티파트 업로드의 목록을 확인할 수 있습니다.
진행 중인 멀티파트 업로드는 시작했지만 아직 완료 또는 중단하지 않은 업로드입니다. 각 요청은 최대 1,000개의 멀티파트 업로드를 반환합니다. 진행 중인 멀티파트 업로드가 1,000개 이상일 경우 남은 멀티파트 업로드를 모두 검색하려면 추가 요청을 전송해야 합니다. 반환된 목록은 확인을 위해서만 사용합니다. 멀티파트 업로드 완료 요청을 전송할 때 이 나열 결과를 사용하면 안 됩니다. 그 대신, 부분을 업로드할 때 지정한 부분 번호 및 Amazon S3가 반환한 해당 ETag 값의 목록을 보관해야 합니다.
멀티파트 업로드 목록에 대한 자세한 내용은 Amazon Simple Storage Service API 참조의 ListParts를 참조하세요.
멀티파트 업로드 작업을 사용한 체크섬
객체를 업로드할 때 객체 무결성을 검사하기 위해 체크섬 알고리즘을 지정할 수 있습니다. 디렉터리 버킷에는 MD5가 지원되지 않습니다. 다음 SHA(보안 해시 알고리즘) 또는 CRC(순환 중복 검사) 데이터 무결성 확인 알고리즘 중 하나를 지정할 수 있습니다.
-
2013년 8월 9일
-
CRC32C
-
SHA-1
-
SHA-256
Amazon S3 REST API 또는 AWS를 사용하여 GetObject
또는 HeadObject
를 통해 개별 부분의 체크섬 값을 검색할 수 있습니다. 아직 진행 중인 멀티파트 업로드의 개별 부분에 대한 체크섬 값을 검색하려면 ListParts
를 사용하면 됩니다.
중요
이전의 체크섬 알고리즘을 사용하는 경우 멀티파트 번호에 연속된 파트 번호를 사용해야 합니다. 연속되지 않는 부분 번호로 멀티파트 업로드 요청을 완료하려고 하면 Amazon S3에서 HTTP 400 Bad Request
(유효하지 않은 부분 순서) 오류가 생성됩니다.
멀티파트 업로드 객체를 통한 체크섬 작업에 대한 자세한 내용은 객체 무결성 확인 섹션을 참조하세요.
동시 멀티파트 업로드 작업
분산 개발 환경에서는 애플리케이션에서 한 객체에 대해 동시에 여러 업데이트를 시작할 수 있습니다. 예를 들어 애플리케이션은 동일한 객체 키를 사용하여 여러 멀티파트 업로드를 시작할 수 있습니다. 이러한 각 업로드에 대해 애플리케이션은 부분을 업로드한 후 Amazon S3가 객체를 생성하도록 업로드 완료 요청을 전송할 수 있습니다. S3 Express One Zone의 경우 객체 생성 시간은 멀티파트 업로드 완료 날짜입니다.
중요
디렉터리 버킷에 저장된 객체에는 버전 관리가 지원되지 않습니다.
멀티파트 업로드 및 요금
멀티파트 업로드가 시작되면 Amazon S3는 업로드가 완료되거나 중단될 때까지 모든 파트를 계속 유지합니다. 수명 주기가 끝날 때까지 이 멀티파트 업로드와 관련 부분의 모든 스토리지, 대역폭 및 요청에 대해 비용이 청구됩니다. 멀티파트 업로드를 중단하면 Amazon S3가 업로드 결과 및 업로드된 모든 파트를 삭제하므로 더 이상 비용이 청구되지 않습니다. 지정한 스토리지 클래스에 관계없이 불완전한 멀티파트 업로드를 삭제하는 경우 조기 삭제 요금이 부과되지 않습니다. 요금에 대한 자세한 내용은 Amazon S3 요금
중요
전체 멀티파트 업로드 요청이 성공적으로 전송되지 않으면 객체 파트가 어셈블되지 않고 객체가 생성되지 않습니다. 업로드된 부분에 연결된 모든 스토리지에 대해 요금이 청구됩니다. 멀티파트 업로드를 완료하여 객체를 생성하거나 멀티파트 업로드를 중지하여 업로드된 파트를 제거하는 것이 중요합니다.
디렉터리 버킷을 삭제하기 전에 진행 중인 모든 멀티파트 업로드를 완료하거나 중단해야 합니다. 디렉터리 버킷은 S3 수명 주기 구성을 지원하지 않습니다. 필요한 경우 활성 멀티파트 업로드를 나열한 다음 업로드를 중단한 후 버킷을 삭제할 수 있습니다.
멀티파트 업로드 API 작업 및 권한
디렉터리 버킷의 객체 관리 API 작업에 대한 액세스를 허용하려면 버킷 정책 또는 AWS Identity and Access Management(IAM) ID 기반 정책에서 디렉터리 버킷에 s3express:CreateSession
권한을 부여합니다.
멀티파트 업로드 작업을 수행하려면 필수 권한이 있어야 합니다. 버킷 정책 또는 IAM ID 기반 정책을 사용하여 IAM 보안 주체에 이러한 작업을 수행할 권한을 부여할 수 있습니다. 다음 테이블에는 여러 멀티파트 업로드 작업에 대한 필수 권한이 나와 있습니다.
Initiator
요소를 통해 멀티파트 업로드의 이니시에이터를 식별할 수 있습니다. 이니시에이터가 AWS 계정일 경우 이 요소는 Owner
요소와 동일한 정보를 제공합니다. 시작한 사용자가 IAM 사용자일 경우 이 요소는 사용자 ARN 및 표시 이름을 제공합니다.
작업 | 필수 권한 |
---|---|
멀티파트 업로드 생성 |
멀티파트 업로드를 생성하려면 디렉터리 버킷에 대해 |
멀티파트 업로드 시작 |
멀티파트 업로드를 시작하려면 디렉터리 버킷에 대해 |
부분 업로드 |
부분을 업로드하려면 디렉터리 버킷에 대해 이니시에이터가 부분을 업로드하려면 버킷 소유자는 이니시에이터가 디렉터리 버킷에 대한 |
부분 업로드(복사) |
부분을 업로드하려면 디렉터리 버킷에 대해 버킷 소유자는 객체의 멀티파트 업로드를 시작하는 사용자에게 |
멀티파트 업로드 완료 |
멀티파트 업로드를 완료하려면 디렉터리 버킷에 대해 버킷 소유자는 이니시에이터가 멀티파트 업로드를 완료할 수 있도록 객체에 대해 |
멀티파트 업로드 중단 |
멀티파트 업로드를 중단하려면 객체에 대해 멀티파트 업로드를 중단하려면 이니시에이터에게 |
부분 나열 |
멀티파트 업로드의 부분을 나열하려면 디렉터리 버킷에 대해 |
진행 중인 멀티파트 업로드 나열 |
버킷에 대해 진행 중인 멀티파트 업로드를 나열하려면 버킷에 대해 |
멀티파트 업로드를 위한 API 작업 지원
Amazon Simple Storage Service API 참조의 다음 섹션에서는 멀티파트 업로드를 위한 Amazon S3 REST API 작업에 대해 설명합니다.
예시
멀티파트 업로드를 사용하여 디렉터리 버킷의 S3 Express One Zone에 객체를 업로드하려면 다음 예제를 참조하세요.
주제
멀티파트 업로드 생성
참고
디렉터리 버킷의 경우 CreateMultipartUpload
작업 및 UploadPartCopy
작업을 수행할 때 버킷의 기본 암호화는 원하는 암호화 구성을 사용해야 하며, CreateMultipartUpload
요청에 제공하는 요청 헤더는 대상 버킷의 기본 암호화 구성과 일치해야 합니다.
다음 예시는 멀티파트 업로드를 만드는 방법을 보여 줍니다.
이 예시는 AWS CLI를 사용하여 디렉터리 버킷에 대한 멀티파트 업로드를 생성하는 방법을 보여 줍니다. 이 명령은 KEY_NAME
객체에 대해 디렉터리 버킷 bucket-base-name
--azid
--x-s3에 멀티파트 업로드를 시작합니다. 명령을 사용하려면 사용자 입력 자리 표시자
를 사용자의 정보로 대체합니다.
aws s3api create-multipart-upload --bucket
bucket-base-name
--azid
--x-s3 --keyKEY_NAME
자세한 내용은 AWS Command Line Interface의 create-multipart-upload
멀티파트 업로드의 부분 업로드
다음 코드 예시는 멀티파트 업로드의 일부를 업로드하는 방법을 보여 줍니다.
이 예시는 AWS CLI를 사용하여 단일 객체를 여러 부분으로 나눈 다음 디렉터리 버킷에 업로드하는 방법을 보여 줍니다. 명령을 사용하려면 사용자 입력 자리 표시자
를 사용자의 정보로 대체합니다.
aws s3api upload-part --bucket
bucket-base-name
--azid
--x-s3 --keyKEY_NAME
--part-number1
--bodyLOCAL_FILE_NAME
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA
"
자세한 내용은 AWS Command Line Interface의 upload-part
멀티파트 업로드 완료
다음 예시는 멀티파트 업로드를 완료하는 방법을 보여 줍니다.
이 예시는 AWS CLI을 사용하여 디렉터리 버킷에 대한 멀티파트 업로드를 완료하는 방법을 보여 줍니다. 명령을 사용하려면 사용자 입력 자리 표시자
를 사용자의 정보로 대체합니다.
aws s3api complete-multipart-upload --bucket
bucket-base-name
--azid
--x-s3 --keyKEY_NAME
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA
" --multipart-uploadfile://parts.json
이 예시는 전체 파일로 리어셈블해야 하는 멀티파트 업로드의 부분을 설명하는 JSON 구조를 사용합니다. 이 예시에서는 file://
접두사를 사용하여 parts
라는 로컬 폴더에 있는 파일에서 JSON 구조를 로드합니다.
parts.json:
parts.json
{
"Parts": [
{
"ETag": "6b78c4a64dd641a58dac8d9258b88147",
"PartNumber": 1
}
]
}
자세한 내용은 AWS Command Line Interface의 complete-multipart-upload
멀티파트 업로드 중단
다음 예시는 멀티파트 업로드를 중단하는 방법을 보여 줍니다.
다음 예시는 AWS CLI를 사용하여 멀티파트 업로드를 중단하는 방법을 보여 줍니다. 명령을 사용하려면 사용자 입력 자리 표시자
를 사용자의 정보로 대체합니다.
aws s3api abort-multipart-upload --bucket
bucket-base-name
--azid
--x-s3 --keyKEY_NAME
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEAX5hFw-MAQAAAAB0OxUFeA7LTbWWFS8WYwhrxDxTIDN-pdEEq_agIHqsbg
"
자세한 내용은 AWS Command Line Interface의 abort-multipart-upload
멀티파트 업로드 복사 작업 생성
참고
UploadPartCopy가 디렉터리 버킷의 새 객체 파트 복사본을 SSE-KMS로 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. AWS 관리형 키(
aws/s3
)는 지원되지 않습니다. SSE-KMS 구성은 버킷 수명 기간 동안 디렉터리 버킷당 고객 관리형 키 1개만 지원할 수 있습니다. SSE-KMS에 고객 관리형 키를 지정한 후에는 버킷의 SSE-KMS 구성을 위한 고객 관리형 키를 재정의할 수 없습니다. UploadPartCopy 요청 헤더에서 SSE-KMS를 사용하여 새 객체 부분 사본에 대한 서버 측 암호화 설정을 지정할 수 없습니다. 또한,CreateMultipartUpload
요청에서 제공하는 요청 헤더는 대상 버킷의 기본 암호화 구성과 일치해야 합니다.범용 버킷에서 디렉터리 버킷으로, 디렉터리 버킷에서 범용 버킷으로 또는 디렉터리 버킷 간에 UploadPartCopy를 통해 SSE-KMS로 암호화된 객체를 복사하는 경우 S3 버킷 키는 지원되지 않습니다. 이 경우 Amazon S3는 KMS 암호화 개체에 대한 사본 요청이 있을 때마다 AWS KMS를 직접적으로 호출합니다.
다음 예제는 멀티파트 업로드를 사용하여 버킷 간 객체를 복사하는 방법을 보여줍니다.
다음 예시는 AWS CLI를 통해 멀티파트 업로드를 사용하여 프로그래밍 방식으로 버킷의 객체를 디렉터리 버킷으로 복사하는 방법을 보여 줍니다. 명령을 사용하려면 사용자 입력 자리 표시자
를 사용자의 정보로 대체합니다.
aws s3api upload-part-copy --bucket
bucket-base-name
--azid
--x-s3 --keyTARGET_KEY_NAME
--copy-sourceSOURCE_BUCKET_NAME/SOURCE_KEY_NAME
--part-number1
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBnJ4cxKMAQAAAABiNXpOFVZJ1tZcKWib9YKE1C565_hCkDJ_4AfCap2svg
"
자세한 내용은 AWS Command Line Interface의 upload-part-copy
진행 중인 멀티파트 업로드 나열
AWS SDK 또는 AWS CLI를 사용하여 디렉터리 버킷에 대해 진행 중인 멀티파트 업로드를 나열할 수 있습니다.
다음 예시는 AWS CLI를 사용하여 진행 중인(완료되지 않은) 멀티파트 업로드를 나열하는 방법을 보여 줍니다. 명령을 사용하려면 사용자 입력 자리 표시자
를 사용자의 정보로 대체합니다.
aws s3api list-multipart-uploads --bucket
bucket-base-name
--azid
--x-s3
자세한 내용은 AWS Command Line Interface의 list-multipart-uploads
멀티파트 업로드의 부분 나열
다음 예시는 디렉터리 버킷에 대한 멀티파트 업로드의 부분을 나열하는 방법을 보여 줍니다.
다음 예시는 AWS CLI를 사용하여 디렉터리 버킷에 대한 멀티파트 업로드의 부분을 나열하는 방법을 보여 줍니다. 명령을 사용하려면 사용자 입력 자리 표시자
를 사용자의 정보로 대체합니다.
aws s3api list-parts --bucket
--key
bucket-base-name
--azid
--x-s3KEY_NAME
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA
"
자세한 내용은 AWS Command Line Interface의 list-parts