Bagaimana Anda mencari ember amazon s3?


Jawaban:


31

S3 tidak memiliki "pencarian ember" asli ini karena konten yang sebenarnya tidak diketahui - juga, karena S3 adalah kunci / nilai berdasarkan tidak ada cara asli untuk mengakses banyak node sekaligus ala datastore lebih tradisional yang menawarkan (SELECT * FROM ... WHERE ...)(dalam SQL model).

Yang perlu Anda lakukan adalah melakukan ListBucketuntuk mendapatkan daftar objek dalam ember dan kemudian beralih ke setiap item yang melakukan operasi kustom yang Anda terapkan - yang merupakan pencarian Anda.


42
Ini bukan lagi masalahnya. Lihat jawaban rhonda di bawah ini: stackoverflow.com/a/21836343/1101095
Nate

11
Untuk semua pemberi komentar di atas: OP tidak mengindikasikan apakah mereka ingin mencari nama file atau isi kunci (mis. Isi file). Jadi jawaban @honda masih belum mencukupi. Tampaknya pada akhirnya ini adalah latihan yang diserahkan kepada konsumen, karena menggunakan Konsol S3 hampir tidak tersedia untuk pengguna aplikasi dan pengguna umum. Pada dasarnya ini hanya berlaku untuk pemilik bucket dan / atau peran IAM.
Cody Caughlan

Apakah ada layanan pengindeksan seperti lucene.net untuk mengindeks dokumen bucket ini.
Munavvar

Saya terus kembali ke jawaban ini dan membangun alat untuk membantu: bucketsearch.net - memungkinkan untuk pencarian wildcard dll
Jon M

251

Hanya catatan untuk ditambahkan di sini: sekarang 3 tahun kemudian, namun posting ini teratas di Google ketika Anda mengetik "Cara mencari S3 Bucket."

Mungkin Anda sedang mencari sesuatu yang lebih kompleks, tetapi jika Anda mendarat di sini mencoba mencari cara untuk menemukan objek (file) dengan judulnya, itu gila sederhana:

buka ember, pilih "tidak ada" di sebelah kanan, dan mulai ketikkan nama file.

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


43
Ini persis apa yang saya cari. Desain pengalaman pengguna yang mengerikan tidak memiliki isyarat visual
Keith Entzeroth

2
Perlu memilih file di ember, lalu mulai mengetik.
cabe56

30
Tetap saja Anda mencari dengan awalan nama item.
Daniel Flippance

21
Ini benar-benar menyebalkan! Orang-orang membicarakan sesuatu di sisi kanan atau kotak kuning, tetapi saya tidak dapat menemukan apa pun. Pesan "Ketikkan awalan ..." yang sama. Bagaimana "Cari Bucket" bukan default ?? Ini hampir tidak dapat ditemukan seperti perangkat lunak Atlassian ...
vegather

40
Apakah jawaban ini masih terkini? Saya tidak melihat '"tidak ada" di sisi kanan' dan tautan dokumentasi di jawaban sekarang meneruskan ke halaman lain.
BiscuitBaker

112

Berikut cara singkat dan jelek untuk melakukan pencarian nama file menggunakan AWS CLI :

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

1
aws s3 ls s3: // your-bucket --recursive | grep your-search Cukup baik untuk pencarian saya, terima kasih Abe Voelker.
man.2067067

3
Semua kotak: aws s3 ls | awk '{print $ 3}' | saat membaca baris; lakukan echo $ line; aws s3 ls s3: // $ line --recursive | ambil pencarian Anda; selesai
Akom

1
apa yang dipotong -c 32- tanpa ini juga pencarian berfungsi
sunil

1
cut -c 32-cukup matikan cap waktu dan info ukuran file dari output, yang pada sistem saya membutuhkan 32 karakter. Anda tidak membutuhkannya tetapi jika Anda memipis output ke perintah lain, mungkin berguna untuk memiliki output "bersih".
Abe Voelker

CLI mendukung include/exclude. Jadi,aws s3 ls s3://bucket --recursive --exclude '*' --include 'myfile*'
Mohnish

25

Ada (setidaknya) dua use case berbeda yang dapat digambarkan sebagai "search the bucket":

  1. Cari sesuatu di dalam setiap objek yang disimpan di ember; ini mengasumsikan format umum untuk semua objek dalam ember itu (katakanlah, file teks), dll. Untuk sesuatu seperti ini, Anda dipaksa untuk melakukan apa yang baru saja dijawab Cody Caughlan. AWS S3 docs memiliki contoh kode yang menunjukkan bagaimana melakukan ini dengan AWS SDK untuk Java: Kunci Daftar Menggunakan AWS SDK untuk Java (di sana Anda juga akan menemukan contoh PHP dan C #).

  2. Daftar item Cari sesuatu di kunci objek yang terdapat dalam ember itu; S3 memang memiliki dukungan parsial untuk ini, dalam bentuk memungkinkan pencocokan dengan awalan yang tepat + menciutkan pertandingan setelah pembatas. Ini dijelaskan lebih terinci di Panduan Pengembang AWS S3 . Ini memungkinkan, misalnya, untuk mengimplementasikan "folder" melalui penggunaan seperti kunci objek seperti

    folder / subfolder / file.txt
    Jika Anda mengikuti konvensi ini, sebagian besar S3 GUI (seperti Konsol AWS) akan menunjukkan kepada Anda tampilan folder dari ember Anda.


docs untuk menggunakan awalan di ruby
James

22

AWS merilis Layanan baru untuk meminta ember S3 dengan SQL: Amazon Athena https://aws.amazon.com/athena/


2
argh ... saya mengerti ... "Athena tidak tersedia di US West (N. California). Silakan pilih wilayah lain."
Clintm

2
Ini adalah overhead dengan semua query SQL ini mengingat saya hanya ingin grep
Ali Gajani

4
@Clintm - ubah ke kami-timur-1 (N. Virginia)
slocumro

21

Ada beberapa opsi, tidak ada yang menjadi solusi teks lengkap "satu tembakan" sederhana:

  1. Pencarian pola nama kunci : Mencari kunci dimulai dengan beberapa string - jika Anda merancang nama kunci dengan hati-hati, maka Anda mungkin memiliki solusi yang lebih cepat.

  2. Cari metadata yang dilampirkan pada kunci : saat memposting file ke AWS S3, Anda dapat memproses konten, mengekstrak beberapa informasi meta dan melampirkan informasi meta ini dalam bentuk tajuk khusus ke dalam kunci. Ini memungkinkan Anda untuk mengambil nama dan tajuk utama tanpa perlu mengambil konten yang lengkap. Pencarian harus dilakukan secara berurutan, tidak ada opsi pencarian "sql like" untuk ini. Dengan file besar ini dapat menghemat banyak lalu lintas jaringan dan waktu.

  3. Menyimpan metadata di SimpleDB : seperti poin sebelumnya, tetapi dengan menyimpan metadata di SimpleDB. Di sini Anda memiliki sql seperti pernyataan pilih. Dalam hal kumpulan data besar Anda dapat mencapai batas SimpleDB, yang dapat diatasi (partisi metadata di beberapa domain SimpleDB), tetapi jika Anda melangkah terlalu jauh, Anda mungkin perlu menggunakan jenis database metedata lain.

  4. Pencarian teks lengkap berurutan dari konten - memproses semua tombol satu per satu. Sangat lambat, jika Anda memiliki terlalu banyak kunci untuk diproses.

Kami menyimpan versi 1.440 file per hari (satu per menit) selama beberapa tahun, menggunakan ember berversi, mudah dilakukan. Tetapi mendapatkan versi yang lebih lama membutuhkan waktu, karena kita harus secara berurutan beralih versi demi versi. Kadang saya menggunakan indeks CSV sederhana dengan catatan, menunjukkan waktu publikasi plus id versi, dengan ini, saya bisa melompat ke versi yang lebih lama dengan lebih cepat.

Seperti yang Anda lihat, AWS S3 tidak dirancang khusus untuk pencarian teks lengkap, melainkan layanan penyimpanan sederhana.


4

Cari berdasarkan Prefiks di S3 Console

langsung di tampilan bucket AWS Konsol.

masukkan deskripsi gambar di sini

Salin file yang diinginkan menggunakan s3-dist-cp

Ketika Anda memiliki ribuan atau jutaan file, cara lain untuk mendapatkan file yang diinginkan adalah menyalinnya ke lokasi lain menggunakan salinan terdistribusi . Anda menjalankan ini pada ESDM dalam Hadoop Job. Yang keren dari AWS adalah mereka menyediakan versi S3 kustom s3-dist-cp . Ini memungkinkan Anda untuk mengelompokkan file yang diinginkan menggunakan ekspresi reguler di bidang groupBy. Anda dapat menggunakan ini misalnya dalam langkah kustom pada ESDM

[
    {
        "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"
    }
]

Akan terlihat bahwa tampilan bucket konsol AWS tidak pergi file demi file menerapkan filter. Ia dapat mengembalikan hasil sangat cepat asalkan substring dari file (s) yang saya cari. Apakah ada klien / alat / API yang bisa saya gunakan selain konsol AWS untuk mendapatkan hasil di manor tepat waktu yang sama. @ high6. Di masa lalu saya telah mencoba menggunakan boto, tetapi pendekatan terbaik tampaknya adalah iterasi seluruh ember menerapkan kriteria pencarian Anda untuk setiap nama file. YAITU. sangat lambat
Salin dan Tempel

4

Jika Anda menggunakan Windows dan tidak punya waktu untuk menemukan grepalternatif yang bagus , cara cepat dan kotor adalah:

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

dan kemudian lakukan pencarian cepat di myfile.txt

Bit "folder" adalah opsional.

NB jika Anda belum menginstal AWS CLI - ini adalah liner satu menggunakan pengelola paket Chocolatey

choco install awscli

PPS Jika Anda tidak memiliki manajer paket Chocolatey - dapatkan! Hidup Anda di Windows akan 10x lebih baik. (Saya tidak berafiliasi dengan Chocolatey dengan cara apa pun, tapi hei, itu benar-benar harus dimiliki).


Jika pengguna dapat choco menginstal awscli, mereka dapat menginstal grep, bukan? Atau gunakan penemuan asli windows?
Dean Radcliffe

2

Mengingat Anda berada di AWS ... Saya pikir Anda ingin menggunakan alat CloudSearch mereka. Masukkan data yang ingin Anda cari dalam layanan mereka ... arahkan ke tombol S3.

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


7
Tidak benar-benar apa yang dicari OP sama sekali
Clintm

bagi saya itu berarti menyimpan semua data di sana - duplikasi data
BG Bruno

1

Opsi lain adalah untuk mencerminkan bucket S3 di server web Anda dan melintasi secara lokal. Caranya adalah bahwa file lokal kosong dan hanya digunakan sebagai kerangka. Atau, file-file lokal dapat menyimpan meta data berguna yang biasanya Anda perlukan dari S3 (mis. Filesize, mimetype, author, timestamp, uuid). Saat Anda memberikan URL untuk mengunduh file, cari secara lokal dan tetapi berikan tautan ke alamat S3.

Traverse file lokal mudah dan pendekatan untuk manajemen S3 ini agnostik bahasa. Traverse file lokal juga menghindari pemeliharaan dan pencarian database file atau penundaan membuat serangkaian panggilan API jarak jauh untuk mengautentikasi dan mendapatkan konten bucket.

Anda dapat mengizinkan pengguna untuk mengunggah file secara langsung ke server Anda melalui FTP atau HTTP dan kemudian mentransfer sejumlah file baru dan yang diperbarui ke Amazon pada waktu tidak sibuk dengan hanya mengulangi direktori untuk file dengan ukuran berapa pun. Setelah menyelesaikan transfer file ke Amazon, ganti file server web dengan yang kosong dengan nama yang sama. Jika file lokal memiliki filesize apa pun maka sajikan langsung karena menunggu transfer batch.


Cara hebat untuk meledakkan ruang penyimpanan simpul Anda pada disk EXTFS2 / 3 jika Anda memiliki jutaan file dalam bucket S3 Anda ...
tpartee

1

Cara saya melakukannya adalah: Saya memiliki ribuan file di s3. Saya melihat panel properti dari satu file dalam daftar. Anda dapat melihat URI dari file itu dan saya salin menempelkannya ke browser - itu adalah file teks dan di-render dengan baik. Sekarang saya mengganti uuid di url dengan uuid yang saya miliki dan booming ada file.

Saya berharap AWS memiliki cara yang lebih baik untuk mencari file, tetapi ini berhasil bagi saya.


1

Coba perintah ini:

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

Kemudian Anda dapat mem-pipe ini menjadi grep untuk mendapatkan tipe file tertentu untuk melakukan apa pun yang Anda inginkan dengannya.


1
Catatan: --output textmenetapkan bahwa output akan berupa teks biasa, bukan JSON, dll. Dan --query 'Contents[].{Key: Key, Size: Size}'hanya menyaring output dari daftar ke nama file dan ukuran file. Itu tidak mencari Key: Keyatau sejenisnya.
Matt

1

Saya mencoba dengan cara berikut

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

Ini menampilkan jalur aktual di mana file itu ada

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

1

Ini adalah utas yang agak lama - tapi mungkin membantu seseorang yang masih mencari - Saya yang mencari itu setahun.

Solusi mungkin " AWS Athena " tempat Anda dapat mencari data seperti ini

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

https://aws.amazon.com/blogs/developer/introducing-support-for-amazon-s3-select-in-the-aws-sdk-for-javascript/

Saat ini harga adalah $ 5 untuk data 1TB - jadi misalnya, jika pencarian Anda mencari lebih dari satu file 1TB 3 kali biaya Anda adalah $ 15 - tetapi misalnya jika hanya ada 1 kolom dalam "format kolom dikonversi" apa yang ingin Anda baca, Anda akan membayar 1 / 3 harga berarti $ 1,67 / TB.


Tampaknya tidak layak untuk aplikasi apa pun yang memerlukan pencarian intensif karena biayanya cukup tinggi ...
tnkh

@ tnkh Saya setuju - Saya ingin lebih banyak pilihan dengan # s3 juga
BG Bruno


0

Saya melakukan sesuatu seperti di bawah ini untuk menemukan pola di ember saya

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
  }

Untuk bucket yang lebih besar, ini menghabiskan terlalu banyak waktu karena semua ringkasan objek dikembalikan oleh Aws dan tidak hanya yang cocok dengan awalan dan pembatas. Saya mencari cara untuk meningkatkan kinerja dan sejauh ini saya hanya menemukan bahwa saya harus memberi nama kunci dan mengaturnya dalam ember dengan benar.


0

Saya menghadapi masalah yang sama. Pencarian di S3 seharusnya jauh lebih mudah daripada situasi saat ini. Itu sebabnya, saya menerapkan alat open source ini untuk mencari di S3.

SSEARCH adalah alat pencarian S3 sumber terbuka lengkap. Itu telah dilaksanakan selalu dengan mengingat bahwa kinerja adalah faktor kritis dan menurut tolok ukur itu mencari ember yang berisi ~ 1000 file dalam hitungan detik.

Instalasi sederhana. Anda hanya mengunduh file komposisi buruh pelabuhan dan menjalankannya

docker-compose up

SSEARCH akan dimulai dan Anda dapat mencari apa pun di keranjang apa pun yang Anda miliki.


0

Maju cepat ke 2020, dan menggunakan aws-okta sebagai 2fa kami, perintah berikut, sementara sangat lambat untuk mengulangi semua objek dan folder dalam ember khusus ini (+270.000) bekerja dengan baik.

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

0

Gunakan Amazon Athena untuk permintaan ember S3. Juga, muat data ke pencarian Amazon Elastic. Semoga ini membantu.


0

Bukan jawaban teknis, tapi saya telah membangun aplikasi yang memungkinkan untuk pencarian wildcard: https://bucketsearch.net/

Ini akan secara sinkron mengindeks ember Anda dan kemudian memungkinkan Anda untuk mencari hasilnya.

Ini gratis untuk digunakan (donationware).


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.