AWS CLI를 사용하여 파일을 Amazon S3에 멀티파트 업로드하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 11월 10일

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

간략한 설명

aws s3 명령(상위 수준) 또는 aws s3api 명령(하위 수준)으로 AWS CLI를 사용해 Amazon S3에 큰 파일을 업로드할 수 있습니다. 이 두 명령 계층에 대한 자세한 내용은 AWS CLI로 Amazon S3 사용하기를 참조하십시오.

멀티파트 업로드 및 다운로드에 aws s3 명령(예: aws s3 cp)을 사용하는 것이 가장 좋습니다. aws s3 명령은 파일 크기에 따라 자동으로 멀티파트 업로드 및 다운로드를 수행하기 때문입니다. 비교하자면 aws s3api 명령, 예를 들면 aws s3api create-multipart-upload와 같은 명령은 aws s3 명령이 특정 업로드 요구 사항, 예를 들면 멀티파트 업로드가 여러 서버와 관련되거나, 멀티파트 업로드가 수동으로 중지되고 나중에 재개되거나, aws s3 명령이 필요한 요청 파라미터를 지원하지 않는 경우에 사용해야 합니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하십시오.

해결 방법

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

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

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

$ aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/

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

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

$ aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/ --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 DOC-EXAMPLE-BUCKET --key large_test_file

3.    이후 단계를 위해 UploadID 값을 참조용으로 복사합니다.

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

aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --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 DOC-EXAMPLE-BUCKET --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 DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

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

{
    "ETag": "\\"exampleae01633ff0af167d925cad279-2\\"",
    "Bucket": "DOC-EXAMPLE-BUCKET",
    "Location": "https://DOC-EXAMPLE-BUCKET.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 DOC-EXAMPLE-BUCKET

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 DOC-EXAMPLE-BUCKET --key large_test_file --upload-id examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?