- vừa được xem lúc

[AWS] Uploading an object using multipart upload

0 0 23

Người đăng: Dương Linh

Theo Viblo Asia

1. Multipart upload

1.1 Overview

  • Multipart upload cho phép upload một object thành từng part. Có thể upload các part một cách độc lập hoặc theo bất kỳ thứ tự nào.
  • Nếu bất kỳ part nào khi upload bị thất bại, có thể upload lại part đó mà không ảnh hưởng đến các part khác.
  • Sau khi tất cả các part của object được upload, AWS sẽ ghép chúng thành object hoàn chỉnh.
  • Khi kích thước object của đạt đến 100MB, nên cân nhắc sử dụng multipart upload thay vì upload cả object trong một thao tác.

1.2 Benefit

  • Cải thiện thông lượng - Có thể tải các part lên song song để cải thiện thông lượng.
  • Khôi phục nhanh chóng từ bất kỳ sự cố mạng nào - Dung lượng nhỏ giảm thiểu tác động của việc upload thất bại do lỗi mạng. (Chỉ cần upload lại part bị lỗi)
  • Tạm dừng hoặc tiếp tục upload - Có thể upload các part của object bất cứ lúc nào. Nhưng phải đảm bảo hoàn thành hoặc dừng multipart upload vì các part đã upload vẫn còn lưu trữ trên S3.
  • Upload trước khi biết dung lượng object cuối cùng - Có thể upload một object khi đang tạo nó.

2. Multipart upload process

  • Multipart upload gồm 3 bước:
    • Multipart upload initiation.
    • Parts upload
    • Multipart upload completion.

2.1 Multipart upload initiation

  • Khi khởi tạo multipart upload, Amazon S3 sẽ trả về ID upload, là ID duy nhất cho 1 multipart upload.
  • Cần phải gửi ID upload này bất cứ khi nào sử dụng upload parts, list the parts, complete an upload, hoặc stop an upload.
  • Nếu muốn cung cấp meta data mô tả object đang được upload, phải cung cấp meta data đó trong request multipart upload.

2.2 Parts upload

  • Khi upload một part, ngoài ID upload, phải chỉ định STT của part. Có thể chọn bất kỳ số nào từ 1 đến 10,000.
  • STT part xác định duy nhất part và vị trí của nó trong object đang upload. STT part không cần phải nằm trong một chuỗi liên tiếp. (ví dụ, nó có thể là 1, 5 và 14).
  • Bất cứ khi nào upload part, Amazon S3 sẽ trả về ETag trong response của nó, cần lưu STT part và giá trị ETag. Cần đưa các giá trị này để hoàn tất quá trình multipart upload.

2.3 Multipart upload completion

  • Khi hoàn tất quá trình multipart upload, Amazon S3 sẽ tạo một object bằng cách nối các part theo thứ tự tăng dần dựa trên STT part.
  • Request multipart upload hoàn chỉnh phải bao gồm ID upload và danh sách STT part và ETag tương ứng.
  • Có thể tùy ý dừng multipart upload. Sau khi dừng multipart upload, không thể upload lại bất kỳ part nào bằng ID upload đó.
  • Sau đó, tất cả bộ nhớ từ bất kỳ part nào của quá trình multipart upload bị hủy sẽ được giải phóng.

3. Hand-on with AWS CLI

3.1 Requirement

aws configure
AWS Access Key ID [****************NLSB]: xxx
AWS Secret Access Key [****************Pz/K]: xxx
Default region name [ap-southeast-1]:
Default output format [None]:
  • Policy IAM user upload (Full quyền thao tác với S3)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:*", "Resource": "*" } ]
}

3.2 Upload the file using high-level (aws s3) commands

  • Để sử dụng high-level aws s3 chạy command sau:
aws s3 cp large_test_file s3://multipartupload2022/
  • Command này tự động thực hiện multiprt upload khi object lớn.
  • Mặc định, AWS CLI sử dụng 10 request đồng thời, Để thay đổi số lượng request:
aws configure set default.s3.max_concurrent_requests 20

3.3 Upload the file in multiple parts using low-level (aws s3api) commands

  • Step 1: Chia tệp bạn muốn tải lên. (VD: 50MB cho mỗi tệp)
split -b 50MB database.sql
  • Step 2: Khởi tạo multipart upload sẽ trả về response có chứa UploadID. Giữ UploadID để dùng khi upload part.
aws s3api create-multipart-upload --bucket multipartupload2022 --key database.sql
{ "Bucket": "multipartupload2022", "Key": "database.sql", "UploadId": "a6d__Qr3WeBYuDrOwHoBEN9zCYtrjeMH8ugtGJCtKEBC57ij8TYLaAD9vTZ1Ogr453PnqF34rUBfmyOAVgtQeZim9fyEUKP2XblIQD5R5KPRJ6mhoA122nWlflc_5gtnY3W2y65WejC1E7pZmdXv_g--"
}
  • Step 3: Upload từng part của file sẽ trả về response có chứa giá trị ETag. Giữ ETag để gộp các part.
aws s3api upload-part --bucket multipartupload2022 --key large_test_file --part-number 1 --body large_test_file.001 --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk --content-md5 exampleaAmjr+4sRXUwf0w==
{ "ETag": "\"26f2e0ca250321ac3f7c5785978cd248\""
}
  • Step 4: Lặp lại các bước 2 và 3 cho đến khi hết các part.
aws s3api upload-part --bucket multipartupload2022 --key database.sql --part-number 2 --body xab --upload-id a6d__Qr3WeBYuDrOwHoBEN9zCYtrjeMH8ugtGJCtKEBC57ij8TYLaAD9vTZ1Ogr453PnqF34rUBfmyOAVgtQeZim9fyEUKP2XblIQD5R5KPRJ6mhoA122nWlflc_5gtnY3W2y65WejC1E7pZmdXv_g--
{ "ETag": "\"56c1291d9d0c15feb5638bd06acf7287\""
} aws s3api upload-part --bucket multipartupload2022 --key database.sql --part-number 3 --body xac --upload-id a6d__Qr3WeBYuDrOwHoBEN9zCYtrjeMH8ugtGJCtKEBC57ij8TYLaAD9vTZ1Ogr453PnqF34rUBfmyOAVgtQeZim9fyEUKP2XblIQD5R5KPRJ6mhoA122nWlflc_5gtnY3W2y65WejC1E7pZmdXv_g--
{ "ETag": "\"433fb4de67ba17f802841ec62ff9916b\""
} aws s3api upload-part --bucket multipartupload2022 --key database.sql --part-number 4 --body xad --upload-id a6d__Qr3WeBYuDrOwHoBEN9zCYtrjeMH8ugtGJCtKEBC57ij8TYLaAD9vTZ1Ogr453PnqF34rUBfmyOAVgtQeZim9fyEUKP2XblIQD5R5KPRJ6mhoA122nWlflc_5gtnY3W2y65WejC1E7pZmdXv_g--
{ "ETag": "\"f79b306f38900d9262e7e749fba06023\""
}
  • Step 5: Liệt kê các part đã tải lên
aws s3api list-parts --bucket multipartupload2022 --key database.sql --upload-id a6d__Qr3WeBYuDrOwHoBEN9zCYtrjeMH8ugtGJCtKEBC57ij8TYLaAD9vTZ1Ogr453PnqF34rUBfmyOAVgtQeZim9fyEUKP2XblIQD5R5KPRJ6mhoA122nWlflc_5gtnY3W2y65WejC1E7pZmdXv_g--
{ "Parts": [ { "PartNumber": 1, "LastModified": "2022-02-02T03:43:34+00:00", "ETag": "\"26f2e0ca250321ac3f7c5785978cd248\"", "Size": 50000000 }, { "PartNumber": 2, "LastModified": "2022-02-02T03:44:41+00:00", "ETag": "\"56c1291d9d0c15feb5638bd06acf7287\"", "Size": 50000000 }, { "PartNumber": 3, "LastModified": "2022-02-02T03:45:46+00:00", "ETag": "\"433fb4de67ba17f802841ec62ff9916b\"", "Size": 50000000 }, { "PartNumber": 4, "LastModified": "2022-02-02T03:46:49+00:00", "ETag": "\"f79b306f38900d9262e7e749fba06023\"", "Size": 2476799 } ], "Initiator": { "ID": "arn:aws:iam::xxx:user/MultipartUpload", "DisplayName": "MultipartUpload" }, "Owner": { "DisplayName": "xxx", "ID": "xxx" }, "StorageClass": "STANDARD"
}
  • Step 6: Tạo file JSON có định dạng như sau với tên là fileparts.json.
{ "Parts": [ { "ETag": "26f2e0ca250321ac3f7c5785978cd248", "PartNumber": 1 }, { "ETag": "56c1291d9d0c15feb5638bd06acf7287", "PartNumber": 2 }, { "ETag": "433fb4de67ba17f802841ec62ff9916b", "PartNumber": 3 }, { "ETag": "f79b306f38900d9262e7e749fba06023", "PartNumber": 4 } ]
}
  • Step 7: Hoàn tất quá trình multipart upload.
aws s3api complete-multipart-upload --multipart-upload file://fileparts.json --bucket multipartupload2022 --key database.sql --upload-id a6d__Qr3WeBYuDrOwHoBEN9zCYtrjeMH8ugtGJCtKEBC57ij8TYLaAD9vTZ1Ogr453PnqF34rUBfmyOAVgtQeZim9fyEUKP2XblIQD5R5KPRJ6mhoA122nWlflc_5gtnY3W2y65WejC1E7pZmdXv_g--
  • Step 8: Nếu thành công, thì sẽ nhận được respnse tương tự như sau:
{ "Location": "https://multipartupload2022.s3.ap-southeast-1.amazonaws.com/database.sql", "Bucket": "multipartupload2022", "Key": "database.sql", "ETag": "\"623a7ae9915622b1c8f2636a4f302de8-4\""
}

4. Multipart upload limits

Item Specification
Maximum object size 5 TB
Maximum number of parts per upload 10,000
Part numbers 1 - 10,000
Part size 5 MiB - 5 GiB
Maximum number of parts returned for a list parts request 1000
Maximum number of multipart uploads returned in a list multipart uploads request 1000

5. Reference

Uploading and copying objects using multipart upload

How do I use the AWS CLI to perform a multipart upload of a file to Amazon S3?

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 49

- vừa được xem lúc

Tán gái theo kiểu Message Queue là thế nào?

. Bài toán. Vào những năm 1900, khi mà công nghệ chưa phát triển, con người chỉ nói chuyện với nhau trực tiếp hoặc qua thư... . Trai tài gái sắc, họ nói chuyện với nhau một cách thoải mái, tự nhiên. Mọi chuyện yên bình cho đến khi có anh chàng C đến, chiều cao chuẩn 1m8 chứ không cộng thêm sừng. C c

0 0 28

- vừa được xem lúc

Giới thiệu Lambda AWS

Giới thiệu. Nếu bạn là 1 developer, đúng rồi đó, người mà luôn được mọi người nhờ sửa tủ lạnh, ti vi, quạt máy, ống nước, đủ thứ loại trên đời, khi bạn xây dựng một ứng dụng, bạn sẽ muốn được nhiều người sử dụng, trải nghiệm và đánh giá tốt.

0 0 24

- vừa được xem lúc

Tạo tải khoản AWS 2021

Các bài viết trước:. . Ứng dụng AWS trong thực tế. Bạn có thể làm gì với AWS.

0 0 167

- vừa được xem lúc

Tương tác với AWS

Các bài viết trước:. . Ứng dụng AWS trong thực tế. Bạn có thể làm gì với AWS.

0 0 23

- vừa được xem lúc

Khám phá những dịch vụ của AWS

Các bài viết trước:. . Ứng dụng AWS trong thực tế. Bạn có thể làm gì với AWS.

0 0 26