Điểm:2

Làm cách nào để *thực sự* loại trừ một thư mục trong đồng bộ hóa AWS S3?

lá cờ in
DMJ

Các đồng bộ aws s3 lệnh có một --loại trừ cờ cho phép bạn loại trừ một thư mục khỏi quá trình đồng bộ hóa. Tuy nhiên, ngay cả khi các tệp không được tải lên từ thư mục đó, lệnh vẫn xem xét và xử lý tất cả các tệp trong thư mục đó. Lý do tôi muốn loại trừ thư mục đó ngay từ đầu là vì đây là một thư mục rất lớn chứa rất nhiều dữ liệu, với dữ liệu tôi thực sự muốn đồng bộ hóa chỉ là một vài MB trong thư mục mẹ và một vài thư mục con khác. Tuy nhiên, phải mất vài phút để đồng bộ vài MB đó vì có vài GB dữ liệu trong thư mục con dữ liệu đó. Có cách nào tôi có thể thực ra loại trừ (ví dụ: ngay cả khi được xem xét hoặc xử lý) thư mục con đó để lệnh đồng bộ hóa hoàn tất trong một khoảng thời gian hợp lý?

Điểm:3
lá cờ cn

Tôi nghĩ đây có thể là trường hợp kỳ vọng không phù hợp về chức năng mà S3 cung cấp.

S3 thực sự không có bất kỳ cấu trúc nào, nhóm chỉ có một tập hợp phẳng các đối tượng với chuỗi đầy đủ có thể được coi là "đường dẫn" là khóa của từng đối tượng.
Các Hành động API ListObjectsV2 tuy nhiên, cung cấp các tính năng như chỉ định tiền tố (chỉ trả về các đối tượng có khóa bắt đầu bằng một số chuỗi cụ thể) và tùy chọn chỉ định dấu phân cách (tách các khóa theo dấu phân cách được cung cấp và nhóm các phân đoạn khóa lặp lại) cho phép bạn trình bày nội dung của một bộ chứa như thể nó có cấu trúc (chẳng hạn như những gì Bảng điều khiển AWS làm).

Các đồng bộ aws s3 tiện ích có lẽ cũng bắt đầu hoạt động từ bình thường Hành động API ListObjectsV2, nhưng API này không có bất kỳ chức năng nào tương đương với --loại trừ (hoặc --bao gồm) trong tiện ích đồng bộ hóa, chỉ có tùy chọn lấy danh sách được lọc theo tiền tố khóa.
Do đó, có vẻ như tiện ích đồng bộ hóa phải thực hiện việc xử lý các tùy chọn lọc linh hoạt hơn ở phía máy khách vì nó xử lý danh sách đầy đủ các đối tượng cho tiền tố đã chỉ định, điều này sẽ không bao giờ thực sự hiệu quả nếu có nhiều đối tượng dưới tiền tố được chỉ định được cho là bị bỏ qua.

Thay vào đó, những gì bạn muốn làm trong kịch bản của mình có thể là chỉ định tiền tố hoặc các tiền tố mà bạn muốn thay vì chỉ định tiền tố chung chung hơn và lọc những gì bạn không muốn. Nếu những gì bạn muốn không thể xác định được bằng tiền tố, bạn có thể cân nhắc thay đổi cách đặt tên của mình để có một số tiền tố đã biết mà bạn có thể chỉ định. (Hoặc thậm chí có thể sử dụng các nhóm riêng biệt cho các loại dữ liệu khác nhau, nếu điều đó phù hợp hơn với tình huống của bạn.)

lá cờ in
DMJ
Tôi hiểu rồi, điều đó thực sự có ý nghĩa trong bối cảnh tải xuống từ S3. Tuy nhiên, điều này ít có ý nghĩa hơn trong ngữ cảnh tải lên: hệ thống tệp mà tôi đang tải lên có cấu trúc được xác định thực tế, ngay cả khi S3 chỉ là các cặp khóa-giá trị. Tôi cho rằng có lẽ trong tình huống này, đó chỉ là sự thiếu tối ưu hóa cho trường hợp sử dụng này?
lá cờ cn
@DMJ Đúng vậy, nếu bạn đang xem xét cụ thể trường hợp "tải lên từ hệ thống tệp cục bộ lên s3", tôi cho rằng việc tối ưu hóa trường hợp ngược lại thậm chí còn khó khăn hơn nhiều. Một mối quan tâm khác cũng áp dụng cho trường hợp cục bộ là làm thế nào `--exclude` có thể là một mẫu được viết để khớp với bất kỳ phần nào của đường dẫn, do đó, trong khi sử dụng một mẫu khớp về cơ bản với một thư mục dẫn đầu, có vẻ như nó có thể được tối ưu hóa cho cục bộ. hệ thống tệp, trường hợp chung vẫn yêu cầu xem xét đệ quy tất cả các tệp cục bộ. Tôi có thể tưởng tượng rằng họ chưa tối ưu hóa cho trường hợp đặc biệt đó.
Điểm:0
lá cờ in
DMJ

Mặc dù câu trả lời của HÃ¥kan Lindqvist dường như là câu trả lời đúng về mặt kỹ thuật, nhưng thật không may, nó không giải quyết được vấn đề. Đồng bộ hóa (tải lên) một vài MB mất tới 30 phút do một thư mục con lớn đã bị loại trừ. Vì AWS CLI dường như không hỗ trợ chức năng mà tôi cần, nên tôi đã chuyển sang một công cụ khác thay thế: tập lệnh trình bao.

#!/bin/sh

cho tệp cục bộ trong /home/path/to/source/files/*.*
làm 
aws s3 cp "$localfile" s3://path/to/bucket/
xong

đồng bộ hóa aws s3 /home/path/to/source/files/subfolder1 s3://path/to/bucket/subfolder1
đồng bộ hóa aws s3 /home/path/to/source/files/subfolder2 s3://path/to/bucket/subfolder2
đồng bộ hóa aws s3 /home/path/to/source/files/subfolder3 s3://path/to/bucket/subfolder3
# Cố tình bỏ qua thư mục con4
đồng bộ hóa aws s3 /home/path/to/source/files/subfolder5 s3://path/to/bucket/subfolder5
đồng bộ hóa aws s3 /home/path/to/source/files/subfolder6 s3://path/to/bucket/subfolder6
đồng bộ hóa aws s3 /home/path/to/source/files/subfolder7 s3://path/to/bucket/subfolder7
đồng bộ hóa aws s3 /home/path/to/source/files/subfolder8 s3://path/to/bucket/subfolder8
đồng bộ hóa aws s3 /home/path/to/source/files/subfolder9 s3://path/to/bucket/subfolder9
đồng bộ hóa aws s3/home/path/to/source/files/subfolder10 s3://path/to/bucket/subfolder10

Mặc dù cách tiếp cận này đã giải quyết được vấn đề mà tôi gặp phải trong trường hợp cụ thể của mình, nhưng nó không phải là không có nhược điểm:

  • Các aws s3 cp lệnh luôn tải tệp lên, ngay cả khi nó không thay đổi kể từ lần trước
  • Chạy aws s3 cp lệnh trong vòng lặp for đối với tôi có vẻ chậm hơn đáng kể so với lệnh đồng bộ aws s3 lệnh nói chung là trong trường hợp bình thường.
  • Dựa trên câu trả lời của HÃ¥kan Lindqvist, tôi không chắc cách tiếp cận này sẽ giúp ích gì cho những người đang tải xuống thay vì tải lên
  • Không đa nền tảng (Điều này sẽ không hoạt động trên Windows. May mắn thay cho tôi là tôi đang dùng Linux.)

Bất chấp những hạn chế, trong hoàn cảnh của tôi, điều này nhanh hơn nhiều so với việc sử dụng đồng bộ aws s3 với --loại trừ cờ, vì vậy tôi hài lòng. Tuy nhiên, tôi hy vọng Amazon sẽ cung cấp một lựa chọn tốt hơn trong tương lai.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.