Jawaban:
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 ListBucket
untuk mendapatkan daftar objek dalam ember dan kemudian beralih ke setiap item yang melakukan operasi kustom yang Anda terapkan - yang merupakan pencarian Anda.
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
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-
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".
include/exclude
. Jadi,aws s3 ls s3://bucket --recursive --exclude '*' --include 'myfile*'
Ada (setidaknya) dua use case berbeda yang dapat digambarkan sebagai "search the bucket":
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 #).
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.txtJika Anda mengikuti konvensi ini, sebagian besar S3 GUI (seperti Konsol AWS) akan menunjukkan kepada Anda tampilan folder dari ember Anda.
AWS merilis Layanan baru untuk meminta ember S3 dengan SQL: Amazon Athena https://aws.amazon.com/athena/
Ada beberapa opsi, tidak ada yang menjadi solusi teks lengkap "satu tembakan" sederhana:
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.
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.
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.
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.
langsung di tampilan bucket AWS Konsol.
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"
}
]
Jika Anda menggunakan Windows dan tidak punya waktu untuk menemukan grep
alternatif 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).
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.
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 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.
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.
--output text
menetapkan 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: Key
atau sejenisnya.
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'
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.
Lihatlah dokumentasi ini: http://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=amazons3/get_object_list
Anda dapat menggunakan Ekspresi Reguler Kompatibel Kompatibel (PCRE) untuk memfilter nama.
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.
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.
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
Gunakan Amazon Athena untuk permintaan ember S3. Juga, muat data ke pencarian Amazon Elastic. Semoga ini membantu.
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).
Status 2018-07: Amazon memang memiliki sql asli seperti mencari file csv dan json!