AWS CLI를 사용하여 대용량의 멀티파트 파일을 Amazon S3에 업로드하려면 어떻게 해야 하나요?

4분 분량
0

대용량 파일을 Amazon Simple Storage Service(S3) 버킷에 멀티파트로 복사하거나 멀티파트 업로드를 사용하려고 합니다. AWS Command Line Interface(AWS CLI)를 사용하여 파일을 업로드하려고 합니다.

간략한 설명

대용량 파일을 Amazon S3에 업로드하려면 AWS CLI와 함께 상위 수준 aws s3 명령이나 하위 수준 aws s3api 명령을 사용합니다. 이 두 명령 계층에 대한 자세한 내용은 AWS CLI와 함께 Amazon S3 사용을 참조하세요.

중요: 멀티파트 업로드 및 다운로드에는 aws s3 cp와 같은 aws s3 명령을 사용하는 것이 좋습니다. 이는 aws s3 명령이 파일 크기에 따라 멀티파트 업로드 및 다운로드를 자동으로 수행하기 때문입니다. aws s3 명령이 특정 업로드를 지원하지 않을 때만 aws s3api create-multipart-upload와 같은 aws s3api 명령을 사용하세요. 예를 들어, 여러 서버를 포함하는 멀티파트 업로드 또는 멀티파트 업로드를 수동으로 중지했다가 나중에 다시 시작하는 경우가 그렇습니다. 또는 aws s3 명령이 필요한 요청 파라미터를 지원하지 않을 수 있습니다.

해결 방법

파일을 업로드하기 전에 업로드 후 무결성 검사를 위한 참조로 파일의 MD5 체크섬 값을 계산하세요.

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

상위 수준 aws s3 명령 사용

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

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

이 예시에서는 개체 크기가 클 때 자동으로 멀티파트 업로드를 수행하기 위해 aws s3 cp 명령을 사용합니다. S3 버킷에 개체를 업로드하는 다른 aws s3 명령도 사용할 수 있습니다. 예를 들어 aws s3 sync 또는 aws s3 mv 명령을 사용할 수 있습니다.

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 명령 사용

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.    업로드한 각 파일 파트의 ETag 값을 JSON 형식의 파일로 컴파일합니다.

예제 JSON 파일:

{
    "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

관련 정보

멀티파트 업로드를 사용한 개체 업로드 및 복사

AWS 공식
AWS 공식업데이트됨 10달 전