Làm cách nào để di chuyển tệp giữa hai nhóm S3 với chi phí tối thiểu?


44

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:


53

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:

  • s3cmd-sửa đổi (yêu cầu kéo cụ thể đó) bao gồm các lệnh cp và mv song song và sẽ là một lựa chọn tốt cho bạn.
  • Bảng điều khiển AWS có thể thực hiện sao chép trực tiếp - mặc dù tôi không thể nói nó song song như thế nào.
  • Kịch bản aws của Tim Kay có thể thực hiện sao chép - nhưng nó không song song - bạn sẽ cần phải viết kịch bản để chạy bản sao đầy đủ mà bạn muốn (có thể không phải là lựa chọn tốt nhất trong trường hợp này - mặc dù, đó là một kịch bản tuyệt vời).
  • CloudQuery S3 Explorer , Buck ExplorerCloudBuddy đều có thể thực hiện tác vụ, mặc dù tôi không biết hiệu quả của mỗi lần xếp chồng lên nhau như thế nào. Tôi tin rằng mặc dù các tính năng đa luồng của hầu hết trong số này yêu cầu mua phần mềm.
  • Viết kịch bản của riêng bạn bằng cách sử dụng một trong các SDK có sẵn.

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.


Buck Explorer dường như đang hoạt động tốt đối với tôi (di chuyển các tệp giữa hai nhóm tại thời điểm này)
Mì gói

3
Trường hợp nào aws s3 sync s3://source s3://destinationphù hợp?
Olivier Lalonde

7

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

Cứu đời. Tôi đang sao chép 300 + GB. Mẹo: nếu bạn sao chép từ các thùng trong cùng khu vực thì nhanh hơn ở khu vực khác (và tôi đọc nó ít tốn kém hơn).
Marcelo Agimóvel

Tôi gặp vấn đề với phương pháp của bạn: quyền riêng tư của các tệp đã được đặt thành RIÊNG TƯ, thậm chí hầu hết các đối tượng là công khai, chuyện gì xảy ra?
Marcelo Agimóvel

5

Tôi không chắc chắn đó là cách tiếp cận tốt nhất nhưng bảng điều khiển quản lý AWS có tính năng cắt / sao chép / dán. Rất dễ sử dụng và hiệu quả.


6
Điều đó không có khả năng hoạt động tốt với một triệu tệp.
James

@James có thể đau đớn xác nhận điều đó;)
cướp

3

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.


Tôi đã có một trải nghiệm tuyệt vời với s3s3mirror. Tôi đã có thể thiết lập nó trên nút m2.small EC2 và sao chép 1,5 triệu đối tượng trong khoảng 2 giờ. Việc thiết lập hơi khó khăn, do tôi không quen với Maven và Java, nhưng chỉ cần một vài lệnh apt-get trên Ubuntu để cài đặt mọi thứ. Một lưu ý cuối cùng: Nếu (như tôi) bạn lo lắng về việc chạy tập lệnh không xác định trên nhóm s3 lớn, quan trọng, hãy tạo một người dùng đặc biệt với quyền truy cập chỉ đọc trên nhóm sao chép và sử dụng các thông tin đăng nhập đó. Không có cơ hội xóa ngẫu nhiên.
Mi-chê

Điều này có thể được áp dụng cho xô giữa các tài khoản khác nhau?
Oliver Burdekin

@OliverBurdekin vâng, có một --cross-account-copytùy chọn ( -Cviế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.
cobbzilla

Cảm ơn @rfcreader Làm thế nào tôi có thể ước tính chi phí của việc này? Tôi biết về máy tính chi phí AWS nhưng không biết quy trình này sẽ liên quan gì đến số lượng yêu cầu đặt ls, v.v ... Tôi tưởng tượng khá dễ dàng để đếm các số liệu này bằng CLI nhưng nếu bạn biết thêm hãy liên hệ. Hỗ trợ AWS đề xuất "người trả tiền yêu cầu". ha!
Oliver Burdekin

@OliverBurdekin s3s3mirror không theo dõi số lượng yêu cầu AWS theo loại (NHẬN, SAO CHÉP, XÓA, v.v.). Các số liệu thống kê này được in ra định kỳ khi chạy và một lần cuối cùng ở cuối. Bạn có thể thực hiện chạy thử nghiệm giới hạn / để sao chép một tập hợp con nhỏ của các đối tượng, điều này sẽ mang lại cho bạn cảm giác chung về tổng số yêu cầu sẽ được yêu cầu để sao chép toàn bộ tập dữ liệu.
cobbzilla

2

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.


0

Trong nhóm mất, chọn (các) tệp mà bạn muốn sao chép sang nhóm khác.

  • Trong phần Hành động, chọn 'Sao chép'.
  • Đi đến xô tăng.
  • Trong phần Hành động, chọn 'Dán'

1
Tại sao lặp lại một giải pháp mà những người khác đã đề cập một năm trước?
Benjamin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.