Satya 씨가 S3으로 멀타파트 메시지
업로드를 수행하는 방법을
보여줍니다.

Satya_s3-multipart-upload-cli-1

큰 파일을 Amazon S3 (Simple Storage Service) 버킷에 여러 부분으로 복사하거나 다중 부분 업로드를 사용하여 복사하고 싶습니다. AWS 명령줄 인터페이스(AWS CLI)를 사용하여이 작업을 수행하려면 어떻게 해야 합니까?

aws s3 명령어(상위 수준) 또는 aws s3api 명령어(하위 수준)로 AWS CLI를 사용해서 Amazon S3에 큰 파일을 업로드할 수 있습니다. 두 명령어에 대한 자세한 정보를 보려면 AWS 명령줄 인터페이스로 Amazon S3 사용하기를 참고하십시오.
 
이 추천 명령은 멀티파트 업로드 및 다운로드에 ( aws s3 cp와 같은) aws s3 명령을 사용합니다. 이는 aws s3 명령어가 자동으로 파일 사이즈를 기반으로 멀티파트 업로드 및 다운로드를 수행하기 때문입니다. 비교하자면 aws s3api 명령어, 예를 들면 aws s3api create-multipart-upload와 같은 명령어는 aws s3 명령어가 특정 업로드 요구 사항, 예를 들면 멀티파트 업로드가 다수의 서버와 관계될 때, 멀티파트 업로드는 수동으로 중지되고 나중에 재시작되거나 aws s3 명령어가 요구되는 요구 파라미터를 지원하지 않을 때 사용해야 합니다.

파일을 업로드하기 전에, 업로드 후에 통합성 확인을 위한 참조로 파일의 MD5 체크섬 값을 계산할 수 있습니다.

(권장) 상위 수준 (aws s3) 명령어를 사용하여 파일 업로드

멀티파트 업로드를 위해 상위 수준 aws s3 명령어를 사용하려면, 다음 명령어를 실행합니다.

$ aws s3 cp large_test_file s3://exampleawsbucket/

이 예문은 aws s3 cp 명령어를 사용하지만, S3 버킷(예를 들면 aws s3 동기화 또는 ws s3 mv)에 객체를 업로드하는 것과 관련된 다른 aws s3 명령어 또한 객체가 클 경우 자동으로 멀티파트 업로드를 수행합니다.

멀티파트 업로드를 사용하여 Amazon S3에 업로드되는 객체는 기존의 PUT 요청을 사용하여 업로드된 객체와는 다른 ETag 포맷을 가지고 있습니다. 참고로 소스 파일의 MD5 체크섬 값을 저장하려면 사용자 지정 메타데이터로 체크섬 값으로 파일을 업로드하도록 선택할 수 있습니다. 사용자 지정 메타데이터로 MD5 체크섬 값을 추가하려면 선택 파라미터 --metadata md5="examplemd5value1234/4Q"를 업로드 명령어에 다음과 같이 포함시킵니다.

$ aws s3 cp large_test_file s3://exampleawsbucket/ --metadata md5="examplemd5value1234/4Q"

업로드 중에 호스트의 대역폭과 리소스를 더 많이 사용하려면 AWS CLI 구성에서 최대 동시 요청 수를 늘리십시오. AWS CLI는 기본값으로 최대 10개의 동시 요청을 사용합니다. 이 명령은 최대 동시 요청 수를 20으로 설정합니다.

$ aws configure set default.s3.max_concurrent_requests 20

Amazon S3에서 AWS CLI를 구성하는 자세한 방법은 AWS CLI S3 구성을 참고하십시오.

하위 수준 (aws s3api) 명령을 사용하여 여러 부분으로 파일 업로드

중요: aws s3api 절차는 멀티파트 업로드가 여러 서버를 포함하거나, 여러 부분 업로드가 수동으로 중지 및 재개되거나, aws s3 명령이 실행되지 않는 경우와 같이 특정 업로드 요구를 지원하지 않는 경우에만 사용해야합니다. aws s3 명령은 필요한 요청 매개 변수를 지원하지 않습니다. 다른 멀티파트 업로드의 경우 aws s3 cp 또는 다른 고급 s3 명령을 사용하십시오.

1.    여러 부분으로 업로드 할 파일을 분할하십시오.
팁: Linux 운영 체제를 사용하는 경우 split 명령을 사용할 수 있습니다.

2.    멀티파트 업로드를 시작하고 연관된 업로드 ID를 검색하려면 이 명령을 실행하십시오. 이 명령은 UploadID가 포함된 응답을 반환합니다.

aws s3api create-multipart-upload --bucket exampleawsbucket --key large_test_file

3.    UploadID 값을 이후 단계의 참조로 복사하십시오.

4.    이 명령을 실행하여 파일의 첫 번째 부분을 업로드하십시오. 버킷, 파일 및 멀티파트 업로드의 모든 값을 바꿔야 합니다. 이 명령은 업로드 한 파일 부분에 대한 ETag 값이 포함된 응답을 반환합니다. 각 파라미터에 대한 자세한 정보는 upload-part를 참조하십시오.

aws s3api upload-part --bucket exampleawsbucket --key large_test_file --part-number 1 --body large_test_file.001 --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk --content-md5 exampleaAmjr+4sRXUwf0w==

5.    나중 단계에 대한 참조로 ETag 값을 복사하십시오.

6.    파일의 각 부분에 대해 4단계와 5단계를 반복합니다. 업로드하는 새로운 부분에 따라 부분 번호가 증가하는지 확인하십시오.

7.    모든 파일 부분을 업로드 한 후, 이 명령을 실행하여 업로드 된 부분을 나열하고 목록이 완료되었는지 확인하십시오.

aws s3api list-parts --bucket exampleawsbucket --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

8.    다음과 유사한 JSON 형식의 파일에 업로드 한 각 파일 부분에 대한 ETag 값을 컴파일하십시오.

{
    "Parts": [{
        "ETag": "example8be9a0268ebfb8b115d4c1fd3",
        "PartNumber":1
    },

    ....

    {
        "ETag": "example246e31ab807da6f62802c1ae8",
        "PartNumber":4
    }]
}

9.    파일 이름을 fileparts.json으로 지정합니다.

10.    이 명령을 실행하여 멀티파트 업로드를 완료하십시오. --multipart-upload의 값을 작성한 ETags가있는 JSON 형식 파일의 경로로 바꿉니다.

aws s3api complete-multipart-upload --multipart-upload file://fileparts.json --bucket exampleawsbucket --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

11.    이전 명령이 성공하면 다음과 유사한 응답이 표시됩니다.

{
    "ETag": "\\"exampleae01633ff0af167d925cad279-2\\"",
    "Bucket": "exampleawsbucket",
    "Location": "https://exampleawsbucket.s3.amazonaws.com/large_test_file",
   
    "Key": "large_test_file"
}

업로드 실패 확인

멀티파트 업로드를 위해 고급 aws s3 명령을 사용하고 업로드가 실패한 경우 (시간 초과 또는 수동 취소로 인해) 새로운 멀티파트 업로드를 시작해야 합니다. 대부분의 경우 AWS CLI는 자동으로 멀티파트 업로드를 중단한 다음 생성한 멀티파트 파일을 제거합니다. 이 프로세스는 몇 분 정도 걸릴 수 있습니다.

멀티파트 업로드에 aws s3api 명령을 사용하고 프로세스가 중단된 경우 업로드의 불완전한 부분을 제거한 다음 해당 부분을 다시 업로드해야 합니다.

불완전한 부분을 제거하려면 AbortIncompleteMultipartUpload 수명 주기 작업을 해야 합니다. 또는 다음 단계에 따라 aws s3api 명령을 사용하여 불완전한 부분을 제거할 수 있습니다.

1.    불완전한 멀티파트 파일 업로드를 나열하려면 이 명령을 실행하십시오. --bucket의 값을 버킷의 이름으로 바꿉니다.

aws s3api list-multipart-uploads --bucket exampleawsbucket

2.    명령은 다음과 같이 처리되지 않은 파일 부분이 있는 메시지를 반환합니다.

{
    "Uploads": [
        {
           
    "Initiator": {
                "DisplayName": "multipartmessage",
                "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    "
            },
            "Initiated": "2016-03-31T06:13:15.000Z",
           
    "UploadId": "examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB_A-",
            "StorageClass": "STANDARD",
           
    "Key": "",
            "Owner": {
                "DisplayName": "multipartmessage",
               
    "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
            }
        }
   ]
}

3.    이 명령을 실행하여 불완전한 부분을 제거하십시오.

aws s3api abort-multipart-upload --bucket exampleawsbucket --key large_test_file --upload-id examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2016-01-25

업데이트됨: 2018-09-25