Làm thế nào để bạn tìm kiếm một thùng am3 s3?


Câu trả lời:


31

S3 không có "tìm kiếm nhóm" riêng này vì nội dung thực tế không xác định - ngoài ra, vì S3 là khóa / giá trị nên không có cách riêng để truy cập nhiều nút cùng một lúc các kho dữ liệu truyền thống cung cấp một (SELECT * FROM ... WHERE ...)(trong SQL mô hình).

Những gì bạn sẽ cần làm là thực hiện ListBucketđể có được một danh sách các đối tượng trong nhóm và sau đó lặp đi lặp lại trên mỗi mục thực hiện một thao tác tùy chỉnh mà bạn thực hiện - đó là tìm kiếm của bạn.


42
Đây không còn là trường hợp. Xem câu trả lời của rhonda bên dưới: stackoverflow.com/a/21836343/1101095
Nate

11
Đối với tất cả những người ủng hộ nhận xét trên: OP không cho biết họ muốn tìm kiếm tên tệp hay nội dung chính (ví dụ: nội dung tệp). Vì vậy, câu trả lời của @ rhonda vẫn có thể không đủ. Dường như đây là một bài tập dành cho người tiêu dùng, vì sử dụng Bảng điều khiển S3 hầu như không có sẵn cho người dùng ứng dụng và người dùng phổ thông của bạn. Về cơ bản, nó chỉ tương ứng với chủ sở hữu xô và / hoặc vai trò IAM.
Cody Caughlan 10/2/2015

Có bất kỳ dịch vụ lập chỉ mục như lucene.net để lập chỉ mục các tài liệu xô này.
Munavvar

Tôi tiếp tục quay lại câu trả lời này và xây dựng một công cụ để trợ giúp: bucketsearch.net - cho phép tìm kiếm ký tự đại diện, v.v.
Jon M

251

Chỉ cần một lưu ý để thêm vào đây: bây giờ là 3 năm sau, nhưng bài đăng này đứng đầu Google khi bạn nhập "Cách tìm kiếm Nhóm S3."

Có lẽ bạn đang tìm kiếm một cái gì đó phức tạp hơn, nhưng nếu bạn hạ cánh ở đây cố gắng tìm ra cách đơn giản để tìm một đối tượng (tệp) theo tiêu đề của nó, thì thật đơn giản:

mở thùng, chọn "không" ở phía bên tay phải và bắt đầu nhập tên tệp.

http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html


43
Điều này thật đúng với gì mà tôi đã tìm kiếm. Thiết kế trải nghiệm người dùng khủng khiếp để có tín hiệu thị giác bằng không
Keith Entzeroth

2
Cần chọn một tệp trong thùng, sau đó bắt đầu nhập.
cabe56

30
Vẫn chỉ cho phép bạn tìm kiếm theo tiền tố của tên mặt hàng.
Daniel Flippance

21
Điều này là hoàn toàn tức giận! Mọi người đang nói về một cái gì đó ở phía bên tay phải hoặc một hộp màu vàng, nhưng tôi không thể tìm thấy bất cứ điều gì. Chỉ cần cùng một thông báo "Nhập tiền tố ...". Làm thế nào là "Nhóm tìm kiếm" không phải là mặc định ?? Nó gần như không thể phát hiện được như phần mềm Atlassian ...
ăn chay

40
Là câu trả lời này vẫn còn hiện tại? Tôi không thấy bất kỳ "" không "nào ở phía bên phải" và liên kết tài liệu trong câu trả lời bây giờ chuyển tiếp đến một trang khác.
Bánh quy

112

Đây là một cách ngắn và xấu để thực hiện tên tệp tìm kiếm bằng AWS CLI :

aws s3 ls s3://your-bucket --recursive | grep your-search | cut -c 32-

1
aws s3 ls s3: // your-xô --recursive | grep your-search Đã đủ tốt cho tìm kiếm của tôi, cảm ơn Abe Voelker.
đàn ông.2067067

3
Tất cả các thùng: aws s3 ls | awk '{in $ 3}' | trong khi đọc dòng; làm echo $ dòng; aws s3 ls s3: // $ line --recursive | grep tìm kiếm của bạn; xong
Akom

1
những gì bị cắt -c 32- mà không có tìm kiếm này cũng hoạt động
sunil

1
cut -c 32-chỉ cần cắt bỏ dấu thời gian và thông tin kích thước tệp từ đầu ra, mà trên hệ thống của tôi có tới 32 ký tự. Bạn không cần nó nhưng nếu bạn chuyển đầu ra sang một lệnh khác thì có thể có đầu ra "sạch".
Abe Voelker

CLI hỗ trợ include/exclude. Vì vậy,aws s3 ls s3://bucket --recursive --exclude '*' --include 'myfile*'
Mohamel

25

Có (ít nhất) hai trường hợp sử dụng khác nhau có thể được mô tả là "tìm kiếm thùng":

  1. Tìm kiếm thứ gì đó bên trong mọi vật thể được lưu trữ trong thùng; cái này giả định một định dạng chung cho tất cả các đối tượng trong nhóm đó (giả sử, tệp văn bản), v.v. Đối với một cái gì đó như thế này, bạn buộc phải làm những gì Cody Caughlan vừa trả lời. Các tài liệu AWS S3 có mã ví dụ cho biết cách thực hiện điều này với AWS SDK cho Java: Các khóa liệt kê sử dụng SDK AWS cho Java (ở đó bạn cũng sẽ tìm thấy các ví dụ về PHP và C #).

  2. Mục danh sách Tìm kiếm thứ gì đó trong các khóa đối tượng có trong thùng đó; S3 khôngmột phần hỗ trợ cho điều này, theo hình thức cho phép tiền tố kết hợp chính xác + sụp đổ trận đấu sau một dấu phân cách. Điều này được giải thích chi tiết hơn tại Hướng dẫn dành cho nhà phát triển AWS S3 . Điều này cho phép, ví dụ, để thực hiện "thư mục" thông qua việc sử dụng như các khóa đối tượng giống như

    thư mục / thư mục con / file.txt
    Nếu bạn tuân theo quy ước này, hầu hết các GUI S3 (như Bảng điều khiển AWS) sẽ hiển thị cho bạn chế độ xem thư mục của nhóm của bạn.


tài liệu cho việc sử dụng tiền tố trong ruby
James

22

AWS đã phát hành Dịch vụ mới để truy vấn các thùng S3 bằng SQL: Amazon Athena https://aws.amazon.com/athena/


2
argh đấu Tôi nhận được "Athena không có sẵn ở US West (N. California). Vui lòng chọn một khu vực khác."
Clintm

2
Đó là một chi phí chung với tất cả các truy vấn SQL này vì tôi chỉ muốn grep
Ali Gajani

4
@Clintm - đổi sang us-East-1 (N. Virginia)
slocumro

21

Có nhiều tùy chọn, không có giải pháp toàn văn "một shot" đơn giản nào:

  1. Tìm kiếm mẫu tên khóa : Tìm kiếm các khóa bắt đầu bằng một số chuỗi - nếu bạn thiết kế tên khóa cẩn thận, thì bạn có thể có giải pháp khá nhanh.

  2. Tìm kiếm siêu dữ liệu được đính kèm theo khóa : khi đăng tệp lên AWS S3, bạn có thể xử lý nội dung, trích xuất một số thông tin meta và đính kèm thông tin meta này dưới dạng tiêu đề tùy chỉnh vào khóa. Điều này cho phép bạn tìm nạp tên chính và tiêu đề mà không cần tìm nạp nội dung đầy đủ. Việc tìm kiếm phải được thực hiện tuần tự, không có tùy chọn tìm kiếm "sql like" cho việc này. Với các tệp lớn, điều này có thể tiết kiệm rất nhiều lưu lượng mạng và thời gian.

  3. Lưu trữ siêu dữ liệu trên SimpleDB : như điểm trước, nhưng với việc lưu trữ siêu dữ liệu trên SimpleDB. Ở đây bạn có sql như chọn câu lệnh. Trong trường hợp tập dữ liệu lớn, bạn có thể đạt các giới hạn SimpleDB, có thể khắc phục (siêu dữ liệu phân vùng trên nhiều miền SimpleDB), nhưng nếu bạn thực sự đi xa, bạn có thể cần phải sử dụng một loại cơ sở dữ liệu metedata khác.

  4. Tìm kiếm toàn văn tuần tự của nội dung - xử lý tất cả các khóa từng cái một. Rất chậm, nếu bạn có quá nhiều chìa khóa để xử lý.

Chúng tôi đang lưu trữ 1440 phiên bản của một tệp (một lần mỗi phút) trong vài năm, bằng cách sử dụng xô phiên bản, có thể dễ dàng thực hiện được. Nhưng để có được một số phiên bản cũ hơn cần có thời gian, vì người ta phải tuần tự đi từng phiên bản. Thỉnh thoảng tôi sử dụng chỉ mục CSV đơn giản với các bản ghi, hiển thị thời gian xuất bản cộng với id phiên bản, có điều này, tôi có thể chuyển sang phiên bản cũ hơn khá nhanh.

Như bạn thấy, AWS S3 không được thiết kế riêng cho tìm kiếm toàn văn bản, đây là dịch vụ lưu trữ đơn giản.


4

Tìm kiếm theo Tiền tố trong Bảng điều khiển S3

trực tiếp trong chế độ xem Bảng điều khiển AWS.

nhập mô tả hình ảnh ở đây

Sao chép tập tin mong muốn bằng s3-dist-cp

Khi bạn có hàng ngàn hoặc hàng triệu tệp một cách khác để có được các tệp mong muốn là sao chép chúng sang một vị trí khác bằng cách sử dụng bản sao phân tán . Bạn chạy cái này trên EMR trong Công việc Hadoop. Điều thú vị về AWS là họ cung cấp phiên bản S3 tùy chỉnh s3-dist-cp . Nó cho phép bạn nhóm các tệp mong muốn bằng cách sử dụng biểu thức chính quy trong trường groupBy. Bạn có thể sử dụng ví dụ này trong một bước tùy chỉnh trên EMR

[
    {
        "ActionOnFailure": "CONTINUE",
        "Args": [
            "s3-dist-cp",
            "--s3Endpoint=s3.amazonaws.com",
            "--src=s3://mybucket/",
            "--dest=s3://mytarget-bucket/",
            "--groupBy=MY_PATTERN",
            "--targetSize=1000"
        ],
        "Jar": "command-runner.jar",
        "Name": "S3DistCp Step Aggregate Results",
        "Type": "CUSTOM_JAR"
    }
]

Dường như chế độ xem bảng điều khiển AWS không đi theo tệp bằng cách áp dụng bộ lọc. Nó có thể trả về kết quả cực kỳ nhanh chóng, cung cấp một chuỗi con của (các) tệp mà tôi đang tìm kiếm. Có ứng dụng khách / công cụ / API nào tôi có thể sử dụng ngoài bảng điều khiển AWS để nhận kết quả trong cùng một trang viên kịp thời không. @ cao6. Trước đây tôi đã từng thử sử dụng boto, nhưng cách tiếp cận tốt nhất dường như là lặp lại toàn bộ nhóm áp dụng tiêu chí tìm kiếm của bạn cho mỗi tên tệp. I E. cực kỳ chậm
Sao chép và Dán

4

Nếu bạn đang ở trên Windows và không có thời gian để tìm một giải greppháp thay thế hay, một cách nhanh chóng và bẩn thỉu sẽ là:

aws s3 ls s3://your-bucket/folder/ --recursive > myfile.txt

và sau đó thực hiện tìm kiếm nhanh trong myfile.txt

Bit "thư mục" là tùy chọn.

PS nếu bạn chưa cài đặt AWS CLI - đây là một lớp lót sử dụng trình quản lý gói Chocolatey

choco install awscli

PPS Nếu bạn không có trình quản lý gói Chocolatey - hãy lấy nó! Cuộc sống của bạn trên Windows sẽ tốt hơn gấp 10 lần. (Tôi không liên kết với Chocolatey theo bất kỳ cách nào, nhưng này, đó thực sự là một thứ bắt buộc phải có).


Nếu người dùng có thể choco cài đặt awscli thì họ có thể cài đặt grep không? Hoặc sử dụng tìm bản địa của windows?
Dean Radcliffe

2

Cho rằng bạn đang ở AWS ... Tôi nghĩ bạn sẽ muốn sử dụng các công cụ CloudSearch của họ. Đặt dữ liệu bạn muốn tìm kiếm vào dịch vụ của họ ... để nó trỏ đến các phím S3.

http://aws.amazon.com/cloudsearch/


7
Không thực sự là những gì OP đang tìm kiếm
Clintm

đối với tôi điều đó có nghĩa là lưu tất cả dữ liệu - sao chép dữ liệu
BG Bruno

1

Một tùy chọn khác là phản chiếu nhóm S3 trên máy chủ web của bạn và duyệt qua cục bộ. Thủ thuật là các tệp cục bộ trống và chỉ được sử dụng như một bộ xương. Ngoài ra, các tệp cục bộ có thể chứa dữ liệu meta hữu ích mà bạn thường cần lấy từ S3 (ví dụ: kích thước tệp, mimetype, tác giả, dấu thời gian, uuid). Khi bạn cung cấp URL để tải xuống tệp, hãy tìm kiếm cục bộ và cung cấp liên kết đến địa chỉ S3.

Truy cập tệp cục bộ rất dễ dàng và cách tiếp cận này đối với quản lý S3 là bất khả tri về ngôn ngữ. Truyền qua tệp cục bộ cũng tránh việc duy trì và truy vấn cơ sở dữ liệu của các tệp hoặc trì hoãn thực hiện một loạt các lệnh gọi API từ xa để xác thực và nhận nội dung nhóm.

Bạn có thể cho phép người dùng tải tệp trực tiếp lên máy chủ của mình qua FTP hoặc HTTP và sau đó chuyển một loạt tệp mới và cập nhật sang Amazon vào thời gian cao điểm bằng cách chỉ cần đệ quy qua các thư mục cho các tệp có kích thước bất kỳ. Khi hoàn tất chuyển tệp sang Amazon, hãy thay thế tệp máy chủ web bằng một tệp trống cùng tên. Nếu một tệp cục bộ có bất kỳ kích thước tệp nào thì hãy phân phát trực tiếp vì nó đang chờ chuyển hàng loạt.


Cách tuyệt vời để làm nổ không gian lưu trữ nút của bạn trên đĩa EXTFS2 / 3 nếu bạn có hàng triệu tệp trong nhóm S3 của mình ...
tpartee

1

Cách tôi đã làm là: Tôi có hàng ngàn tệp trong s3. Tôi thấy bảng thuộc tính của một tập tin trong danh sách. Bạn có thể thấy URI của tệp đó và tôi sao chép nó vào trình duyệt - đó là một tệp văn bản và nó được hiển thị độc đáo. Bây giờ tôi đã thay thế uuid trong url bằng uuid mà tôi có trong tay và bùng nổ ở đó.

Tôi ước AWS có cách tốt hơn để tìm kiếm tệp, nhưng điều này hiệu quả với tôi.


1

Hãy thử lệnh này:

aws s3api list-objects --bucket your-bucket --prefix sub-dir-path --output text --query 'Contents[].{Key: Key}'

Sau đó, bạn có thể chuyển cái này thành một grep để có được các loại tệp cụ thể để làm bất cứ điều gì bạn muốn với chúng.


1
Lưu ý: --output textchỉ định rằng đầu ra sẽ là văn bản thuần túy, không phải JSON, v.v. và --query 'Contents[].{Key: Key, Size: Size}'chỉ lọc đầu ra của danh sách thành tên tệp và kích thước tệp. Nó không tìm kiếm Key: Keyhoặc tương tự.
Matt

1

Tôi đã thử theo cách sau

aws s3 ls s3://Bucket1/folder1/2019/ --recursive |grep filename.csv

Điều này xuất ra đường dẫn thực tế nơi tệp tồn tại

2019-04-05 01:18:35     111111 folder1/2019/03/20/filename.csv

1

Đây là một chủ đề hơi cũ - nhưng có thể giúp một người vẫn đang tìm kiếm - Tôi là người tìm kiếm trong một năm.

Giải pháp có thể là " AWS Athena " nơi bạn có thể tìm kiếm dữ liệu như thế này

'SELECT user_name FROM S3Object WHERE cast(age as int) > 20'

https://aws.amazon.com/bloss/developer/int sinhing-support-for-amazon-s3-select-in-the-aws-sdk-for-javascript/

Giá hiện tại là 5 đô la cho dữ liệu 1TB - ví dụ: nếu truy vấn của bạn tìm kiếm trên một tệp 1TB 3 lần thì chi phí của bạn là 15 đô la - nhưng ví dụ: nếu chỉ có 1 màu ở "định dạng cột được chuyển đổi" những gì bạn muốn đọc, bạn sẽ trả 1 / 3 giá có nghĩa là $ 1,67 / TB.


Dường như không khả thi đối với bất kỳ ứng dụng nào yêu cầu tìm kiếm chuyên sâu vì chi phí khá cao mặc dù ...
tnkh

@tnkh Tôi đồng ý - Tôi cũng muốn có nhiều tùy chọn hơn với # s3
BG Bruno


0

Tôi đã làm một cái gì đó như dưới đây để tìm các mẫu trong xô của tôi

def getListOfPrefixesFromS3(dataPath: String, prefix: String, delimiter: String, batchSize: Integer): List[String] = {
    var s3Client = new AmazonS3Client()
    var listObjectsRequest = new ListObjectsRequest().withBucketName(dataPath).withMaxKeys(batchSize).withPrefix(prefix).withDelimiter(delimiter)
    var objectListing: ObjectListing = null
    var res: List[String] = List()

    do {
      objectListing = s3Client.listObjects(listObjectsRequest)
      res = res ++ objectListing.getCommonPrefixes
      listObjectsRequest.setMarker(objectListing.getNextMarker)
    } while (objectListing.isTruncated)
    res
  }

Đối với các thùng lớn hơn, việc này tiêu tốn quá nhiều thời gian vì tất cả các tóm tắt đối tượng được trả về bởi Aws và không chỉ các nhóm khớp với tiền tố và dấu phân cách. Tôi đang tìm cách để cải thiện hiệu suất và cho đến nay tôi chỉ thấy rằng tôi nên đặt tên cho các phím và sắp xếp chúng theo đúng cách.


0

Tôi phải đối mặt với cùng một vấn đề. Tìm kiếm trong S3 sẽ dễ dàng hơn nhiều so với tình hình hiện tại. Đó là lý do tại sao, tôi đã triển khai công cụ nguồn mở này để tìm kiếm trong S3.

NGÀY NĂM là công cụ tìm kiếm S3 mã nguồn mở đầy đủ. Nó đã được thực hiện luôn luôn lưu ý rằng hiệu suất là yếu tố quan trọng và theo điểm chuẩn, nó tìm kiếm nhóm chứa ~ 1000 tệp trong vài giây.

Cài đặt đơn giản. Bạn chỉ tải xuống tệp soạn thảo docker và chạy nó với

docker-compose up

SSEARCH sẽ được bắt đầu và bạn có thể tìm kiếm mọi thứ trong bất kỳ thùng nào bạn có.


0

Chuyển nhanh đến năm 2020 và sử dụng aws-okta làm lệnh 2fa của chúng tôi, lệnh sau, trong khi chậm như địa ngục để lặp qua tất cả các đối tượng và thư mục trong nhóm cụ thể này (+270.000) hoạt động tốt.

aws-okta exec dev -- aws s3 ls my-cool-bucket --recursive | grep needle-in-haystax.txt

0

Sử dụng Amazon Athena để truy vấn xô S3. Ngoài ra, tải dữ liệu để tìm kiếm Amazon Elastic. Hi vọng điêu nay co ich.


0

Không phải là một câu trả lời kỹ thuật, nhưng tôi đã xây dựng một ứng dụng cho phép tìm kiếm ký tự đại diện: https://bucketsearch.net/

Nó sẽ lập chỉ mục không đồng bộ xô của bạn và sau đó cho phép bạn tìm kiếm kết quả.

Nó miễn phí để sử dụng (phần mềm đóng góp).


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.