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

  • ์—…๋กœ๋“œ ๋”ฐ๋ผํ•ด๋ณด๊ธฐ URL : https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-multipart-upload-cli/

  • Multipart Upload API ํ™œ์šฉ์‹œ ์ด์ 

    • ์ตœ์ข… ๊ฐœ์ฒด ํฌ๊ธฐ๋ฅผ ์•Œ๊ธฐ ์ „์— ์—…๋กœ๋“œ ์‹œ์ž‘ ๊ฐ€๋Šฅ (You can begin an upload before you know the final object size)
    • ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ์—์„œ ์‹ ์†ํ•˜๊ฒŒ ๋ณต๊ตฌ ๊ฐ€๋Šฅ (Quick recovery from any network issues)
    • ๊ฐ์ฒด ์—…๋กœ๋“œ๋ฅผ ์ผ์‹œ ์ค‘์ง€ ๋ฐ ๋‹ค์‹œ ์‹œ์ž‘ ๊ฐ€๋Šฅ (Pause and resume object uplaods)
  • Multipart Upload ์ œํ•œ : https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/qfacts.html

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