- ๊ธฐ๋ณธ์ ์ผ๋ก 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
- Windows10 + Dcoker + Ubuntu + AWS CLIv2
- Docker์์ exitํ๋ฉด ์ด๋ฏธ์ง์์ ์์ ํ๋ ํ๊ฒฝ ๋ ๋ผ๊ฐํ ๋, ์ด๋์ ๋ base env ๊ตฌ์ถํด๋๊ณ commit or compile๋ก ์ด๋ฏธ์ง ๋ง๋ค์ด๋๊ณ ์ฌ์ฉ ํ ๊ฒ
- ๊ทธ๋ฆฌ๊ณ Docker ์คํ ํ ๋, disk mount (-v) ํ ๊ฒ. (์์ ํ ํ์ผ ๊ฐ๊ณ ์๊ธฐ ์ํจ)
-
์ ๋ก๋ ๋ฐ๋ผํด๋ณด๊ธฐ 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
- ๋ฌด๊ฒฐ์ฑ ์ฒดํฌ์ ํ์ํ 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)
- aws s3api upload-part --bucket BUCKETNAME --key ORGINFILENAME --part-numer COUNTNUMER --body FILEPATH --uploadid UPLOADIDVALUE --content-md5 MD5KEYVALUE
- ETag ์ ๋ณด ๊ฐ์ ธ์ฌ ๊ฒ
- Upload ์๋ฃ ํ
- aws s3api list-parts --bucket BUCKETNAME --key ORIGINFILENAME --upload-id UPLOADIDVALUE
- Upload ์๋ฃ ํ
- 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 ์ ๋ก๋ ํ์ผ ํ์ธ
- ๋ค์ด๋ก๋ ๋ฐ๋ผํ๊ธฐ URL : https://aws.amazon.com/ko/blogs/korea/amazon-s3-multi-part-dowload/
- ์ฌ์ฉ๋๋ API๋ list-objects, get-object
- ํด๋น ์์ ๋ bucket์ ๊ธฐ์ค์ผ๋ก ์์ฑ, s3api cli ํ์ฉ๋ฒ ๊ฐ์ด ์์ ๋ ๊ฒ
- Pre-requisites
- download ํ๋ ค๋ S3์์ object size check
- ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ถํ ๊ฐ์์ ๋ง๋๋ก ํํธ ํฌ๊ธฐ ๊ณ์ฐ
- Range Get์ ์ด์ฉํด์ object์ ํํธ๋ค์ ๋ณ๋ ฌ์ ์ผ๋ก ๋ค์ด๋ก๋
- ๋ชจ๋ part๋ค์ด ๋ค์ด๋ก๋ ๋ ๋ ๊น์ง ๋๊ธฐ
- ๋ค์ด๋ก๋ ๋ ๋ชจ๋ part๋ค์ ํ๋๋ก ๋ฌถ๊ธฐ
- ์ ์ ํ ์กฐ๊ฑด๋ค์ ์ฒจ๋ถ๋ 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