Skip to content

jeremyhongs/aws_s3api_multipart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 

Repository files navigation

#Basic Concept

  • 기본적으로 Amazon S3에 올릴 수 있는 Object max size는 5GB
  • 따라서 5GB보다 큰 object는 Multipart Upload를 이용해야 하며, 업로드 최대 사이즈는 5TB
  • Object size가 over 100MB의 경우, Multipart Upload 이용 할 것을 권장
  • S3 Multipart download는 upload처럼 별도의 API가 존재하는 것이 아니고, API를 혼합해서 스크립트로 만들고 이를 활용 (s3-test.sh 참고)
  • S3 Multipart upload 제약 조건 (refer : https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html)
  • 이외 작업 전 AWS configure를 조절 필요

    max_concurrent_request / max_queue_size / multipart-threshold / multipart-chunksize

#Environment

  • Windows10 + Dcoker + Ubuntu + AWS CLIv2
  • Docker에서 exit하면 이미지에서 작업하는 환경 날라갈테니, 어느정도 base env 구축해두고 commit or compile로 이미지 만들어놓고 사용 할 것
  • 그리고 Docker 실행 할 때, disk mount (-v) 할 것. (작업한 파일 갖고있기 위함)

1. AWS S3 Multipart Upload

1.1 Step flow (Linux 환경에 AWS CLI 설치 가정)

  • 무결성 체크에 필요한 md5 key 생성 (refer : https://aws.amazon.com/ko/premiumsupport/knowledge-center/data-integrity-s3/)
  • 큰 파일을 split 명령어로 쪼개 둘 것 (refer : https://jhnyang.tistory.com/209)
  • 쪼개어진 파일에 대한 MD5 key 생성 할 것 (openssl)
    • openssl md5 -binary FILE-PATH+FILE-NAME | base64
  • ETag & VersionID 가져오기
    • aws s3api put-object --bucket BUCKETNAME --key ORIGINFILENAME --body FILEPATH --content-md5 MD5KEYVALUE
  • Split file upload (repeat)
    • aws s3api upload-part --bucket BUCKETNAME --key ORGINFILENAME --part-numer COUNTNUMER --body FILEPATH --uploadid UPLOADIDVALUE --content-md5 MD5KEYVALUE
      • part-number : split된 파일 수 (start with : 1)
  • ETag 정보 가져올 것
    • Upload 완료 후
      • aws s3api list-parts --bucket BUCKETNAME --key ORIGINFILENAME --upload-id UPLOADIDVALUE
  • Upload된 전체 파일 리스트
    • ETage 정보를 이용하여 json 파일 생성 (예,fileparts.json)
    • Multi-part Upload Complete
      • aws s3api complete-multipart-upload --multipart-upload JSONFILEPATH --bucket BUCKETNAME --key ORIGINFILENAME --upload-id UPLOADIDVALUE
  • Output 확인
  • S3 업로드 파일 확인

2. AWS S3 Multipart Download

2.1 Step flow (Linux 환경에 AWS CLI 설치 가정)

  • Pre-requisites
    • download 하려는 S3상의 object size check
    • 사용자가 원하는 분할 개수의 맞도록 파트 크기 계산
    • Range Get을 이용해서 object의 파트들을 병렬적으로 다운로드
    • 모든 part들이 다운로드 될 때 까지 대기
    • 다운로드 된 모든 part들을 하나로 묶기
  • 위 선행 조건들은 첨부된 s3-test.sh에 포함된 내용 (스크립트 분석 하면 됨)
  • 각자의 서비스에 맞춰서 스크립트 수정해서 사용하면 됨

2.2 Script (s3-test.sh)

  • Usage : ./s3-test.sh -b BUCKET_NAME -k KEYFILE_NAME -s SPLIT_COUNT
  • Information
    • THRESHOLD PART SIZE : Origin 파일을 나누고자 할 때 활용 할 Size
    • OBJECT SIZE : 다운받고자 하는 파일 사이즈
    • PART SIZE : Origin 파일의 사이즈를 SPLIT COUNT로 나눴을 때 사이즈
      • Message : Each part size except last one must be larger than THRESHOLD_PART_SIZE

About

S3 Multipart (s3api, Up/Download)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages