Tôi có hàng triệu tệp trong nhóm Amazon S3 và tôi muốn chuyển các tệp này sang các nhóm và thư mục khác với chi phí tối thiểu hoặc không mất phí nếu có thể. Tất cả các thùng trong cùng một khu vực.
Làm thế nào tôi có thể làm điều đó?
Tôi có hàng triệu tệp trong nhóm Amazon S3 và tôi muốn chuyển các tệp này sang các nhóm và thư mục khác với chi phí tối thiểu hoặc không mất phí nếu có thể. Tất cả các thùng trong cùng một khu vực.
Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Hàng triệu là một con số lớn - tôi sẽ quay lại vấn đề đó sau.
Bất kể cách tiếp cận của bạn là gì, cơ chế cơ bản cần được sao chép trực tiếp từ nhóm này sang nhóm khác - theo cách này (vì các thùng của bạn ở cùng khu vực), bạn không phải chịu bất kỳ khoản phí nào cho băng thông. Bất kỳ cách tiếp cận nào khác chỉ đơn giản là không hiệu quả (ví dụ: tải xuống và tải lại các tệp).
Việc sao chép giữa các nhóm được thực hiện bằng cách sử dụng 'PUT copy' - đó là yêu cầu PUT bao gồm tiêu đề 'x-amz-copy-source' - Tôi tin rằng đây được phân loại là yêu cầu SAO CHÉP. Điều này sẽ sao chép tệp và theo mặc định các siêu dữ liệu liên quan. Bạn phải bao gồm 'x-amz-acl' với giá trị chính xác nếu bạn muốn đặt ACL cùng một lúc (nếu không, nó sẽ mặc định là riêng tư). Bạn sẽ bị tính phí cho các yêu cầu COPY của mình (0,01 đô la / 1.000 yêu cầu). Bạn có thể xóa các tệp không cần thiết sau khi chúng được sao chép (yêu cầu XÓA không bị tính phí). . yêu cầu).
Các khoản phí trên dường như là không thể tránh khỏi - đối với một triệu đối tượng bạn đang tìm kiếm khoảng $ 10 (hoặc $ 11). Vì cuối cùng, bạn thực sự phải tạo các tệp trên nhóm đích, các cách tiếp cận khác (ví dụ: tar-gzipping các tệp, Nhập / Xuất Amazon, v.v.) sẽ không có chi phí này. Dù sao đi nữa, nó có thể đáng để bạn liên hệ với Amazon nếu bạn có hơn một vài triệu đối tượng cần chuyển.
Với mức giá trên (giá không thể tránh khỏi), điều tiếp theo cần xem xét là thời gian, đây sẽ là một yếu tố lớn khi sao chép 'hàng triệu tệp'. Tất cả các công cụ có thể thực hiện sao chép trực tiếp giữa các nhóm sẽ phải chịu cùng một khoản phí. Thật không may, bạn yêu cầu một yêu cầu cho mỗi tệp (để sao chép), một yêu cầu xóa và có thể một yêu cầu đọc dữ liệu ACL (nếu tệp của bạn có ACL khác nhau). Tốc độ tốt nhất sẽ đến từ bất cứ điều gì có thể chạy các hoạt động song song nhất.
Có một số cách tiếp cận dòng lệnh có thể khá khả thi:
Có một số khả năng s3fs có thể hoạt động - nó khá song song, không hỗ trợ các bản sao giữa cùng một nhóm - KHÔNG hỗ trợ các bản sao giữa các nhóm khác nhau, nhưng có thể hỗ trợ di chuyển giữa các nhóm khác nhau.
Tôi sẽ bắt đầu với sửa đổi s3cmd và xem liệu bạn có thành công với nó hay liên hệ với Amazon để có giải pháp tốt hơn.
aws s3 sync s3://source s3://destination
phù hợp?
Chủ đề cũ, nhưng điều này là cho bất cứ ai điều tra cùng một kịch bản. Cùng với thời gian tôi đã mất, cho hơn 20.000 đối tượng. Chạy trên AWS Linux / Centos, mỗi đối tượng là hình ảnh cho hầu hết các phần, cùng với một số video và các tệp phương tiện khác nhau.
Sử dụng Công cụ AWS CLI để Sao chép các tệp từ Nhóm A sang Nhóm B.
A. Tạo thùng mới
$ aws s3 mb s3://new-bucket-name
B. Đồng bộ xô cũ với xô mới
$ aws s3 sync s3://old-bucket-name s3://new-bucket-name
Sao chép hơn 20.000 đối tượng ...
Bắt đầu 17:03
Đã kết thúc 17:06
Tổng thời gian cho hơn 20.000 đối tượng = khoảng 3 phút
Khi nhóm mới được định cấu hình chính xác, các quyền, chính sách, v.v. và bạn muốn xóa nhóm cũ.
C. Xóa / xóa thùng cũ
$ aws s3 rb --force s3://old-bucket-name
Tôi tưởng tượng bây giờ bạn có thể tìm thấy một giải pháp tốt, nhưng đối với những người khác đang gặp phải vấn đề này (như tôi mới chỉ gần đây), tôi đã tạo ra một tiện ích đơn giản dành riêng cho mục đích phản chiếu một thùng S3 sang một thùng khác trong một cách hiệu quả đồng thời, nhưng CPU và bộ nhớ hiệu quả.
Đó là trên github theo Giấy phép Apache tại đây: https://github.com/cobbzilla/s3s3mirror
Nếu bạn quyết định thử, xin vui lòng cho tôi biết nếu bạn có bất kỳ phản hồi nào.
--cross-account-copy
tùy chọn ( -C
viết tắt) để làm điều này. Lưu ý rằng khi sao chép trên các tài khoản, ACL không được sao chép; chủ sở hữu của thùng đích sẽ có toàn quyền đối với dữ liệu được sao chép.
AWS CLI cung cấp một cách để sao chép một nhóm này sang một nhóm khác trong các quy trình song song. Lấy từ https://stackoverflow.com/a/40270349/371699 :
Các lệnh sau sẽ yêu cầu AWS CLI sử dụng 1.000 luồng để thực thi công việc (mỗi tệp nhỏ hoặc một phần của bản sao nhiều phần) và xem trước 100.000 công việc:
aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
Sau khi chạy chúng, bạn có thể sử dụng lệnh đồng bộ hóa đơn giản như sau:
aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
Trên máy m4.xlarge (trong AWS - 4 lõi, RAM 16 GB), đối với trường hợp của tôi (tệp 3-50 GB), tốc độ đồng bộ / sao chép đã tăng từ khoảng 9,5MiB / s lên 700 + MiB / s, tốc độ tăng 70x so với cấu hình mặc định.