S3 멀티파트 업로드 및 유의사항

dawon·2022년 9월 2일
0
post-thumbnail

사전지식

원본 파일이 대용량일 경우 파트를 나눠서 업로드 방법에 대해 안내합니다.

유의사항

멀티파트 업로드를 진행하는 경우에 아래와 같은 특이사항이 있습니다.

  • 일부 파트만 s3에 업로드 하는 경우에는 해당 객체가 s3에 표시되지 않습니다.
  • 표시되지 않는 문제로 인해 불필요한 비용이 발생할 수 있기 때문에 파트에 대한 확인이 필요합니다.

글의 목적

cli를 통해 멀티파트 업로드 작업을 진행하는 방법에 대해 안내합니다.

작업 방법

  1. 아래의 명령어를 통해 하나의 원본 파일을 여러개의 파트로 분할합니다.
    4개의 파트로 분할하며 C0031.MP4라는 파일명 뒤에 숫자가 붙는 옵션입니다.
    C0031.MP4라는 파일에 대해 C0031.MP4_00부터 C0031.MP4_03까지 파일이 생성됩니다.
split -n 4 -d C0031.MP4 C0031.MP4_
  1. 멀티파트 업로드를 시작하고 연관된 업로드 ID를 검색하기 위해 아래의 명령어를 실행합니다.
aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file
  1. 아래의 명령어를 통해 파트를 하나씩 업로드합니다.
aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --key large_test_file --part-number 1 --body large_test_file.001 --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk
  1. 모든 파트를 업로드하고, 아래의 명령을 실행하여 업로드된 파트에 대한 정보를 확인합니다.
aws s3api list-parts --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk
  1. 업로드된 파트에 대한 정보를 아래와 같이 하나의 파일로 입력합니다.
{
    "Parts": [{
        "ETag": "c395b6f12e7584adddaabcea9ca3d395",
        "PartNumber":1
    },
    {
        "ETag": "da056bdd6302465d578092abc6b20015",
        "PartNumber":2
    },
    {
        "ETag": "67c70700534dd6744901411a67dc1c65",
        "PartNumber":3
    },
    {
        "ETag": "7bf86d1bd6e0b6a7ced153bc177ca768",
        "PartNumber":4
    }]
}
  1. 아래의 명령어를 통해 멀티파트 업로드 작업을 완료합니다.
aws s3api complete-multipart-upload --multipart-upload file://fileparts.json --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk
  1. 업로드가 정상적으로 완료되면 아래와 같은 응답을 확인할 수 있습니다.
{
    "ETag": "\\"exampleae01633ff0af167d925cad279-2\\"",
    "Bucket": "DOC-EXAMPLE-BUCKET",
    "Location": "https://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/large_test_file",
   
    "Key": "large_test_file"
}

작업 결과

네트워크 환경이 좋지 않거나 파일의 크기가 커서 시간이 다소 필요한 경우에 해당 방법을 사용할 수 있습니다.
하지만 상당히 번거로운 작업 과정이 필요하기 때문에 AWS SDK를 통해 구현한 transfer manager와 같은 오픈 소스 등을 활용할 수 있습니다.
위 가이드에 대한 자세한 사항은 공식 문서에서 확인이 가능합니다.

0개의 댓글