Amazon S3 Kovasını Nasıl Ararsınız?


Yanıtlar:


31

S3 yerli gerçek içeriği beri "bu kovayı arama" yok bilinmemektedir - Ayrıca, S3 bir teklif ala daha geleneksel veri depolarına kerede erişim birçok düğümlere hiçbir yerli yolu yoktur tabanlı anahtar / değer olduğundan (SELECT * FROM ... WHERE ...)(a SQL modeli).

Yapmanız gereken ListBucket, kovadaki nesnelerin bir listesini almak ve ardından uyguladığınız özel bir işlemi gerçekleştiren her öğeyi yinelemek - yani sizin araştırmanızdır.


42
Artık durum böyle değil. Aşağıdaki
Nate

11
Yukarıdaki yorumun tüm üst düzey yöneticilerine: OP, dosya adlarını mı, yoksa anahtar içeriklerini mi (örneğin, dosya içerikleri) aramak istediklerini belirtmez. Yani @ rhonda'nın cevabı hala yeterli olmayabilir. S3 Konsolu'nu kullanmak uygulama kullanıcılarınız ve genel kullanıcılarınız için neredeyse hiç bulunmadığından, sonuçta bu tüketiciye bırakılan bir egzersiz gibi görünüyor. Temel olarak sadece kova sahibine ve / veya IAM rollerine geri döner.
Cody Caughlan

Bu kova belgelerini endekslemek için lucene.net gibi herhangi bir indeksleme servisi var mı?
Munavvar

Bu cevaba geri dönmeye devam ettim ve yardım etmek için bir araç geliştirdim: bucketsearch.net - joker karakterli arama vb. Sağlar
Jon M

251

Buraya eklemek için bir not: şimdi 3 yıl sonra, ancak "S3 Grubu nasıl aranır" yazdığınızda bu yayın Google'da en üst sıradadır.

Belki daha karmaşık bir şey arıyorsunuz, ancak buraya bir nesneyi (dosyayı) başlığına göre nasıl bulacağınızı anlamaya çalışıyorsanız, çılgın basit:

kovayı açın, sağ taraftaki "yok" u seçin ve dosya adını yazmaya başlayın.

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


43
Tam da aradığım şey buydu. Sıfır görsel
ipucuna

2
Grupta bir dosya seçmeniz ve ardından yazmaya başlamanız gerekir.
cabe56

30
Yine de yalnızca öğe adının önekiyle arama yapalım.
Daniel Flippance

21
Bu kesinlikle sinir bozucu! İnsanlar sağ taraftaki bir şeyden veya sarı bir kutudan bahsediyorlar, ama hiçbir şey bulamıyorum. Aynı "Öneki yazın ..." mesajı. "Arama Kovası" nasıl varsayılan değildir? Atlassian yazılımı kadar neredeyse keşfedilemez ...
vegather

40
Bu cevap hala güncel mi? Sağ tarafta herhangi bir "" hiçbiri "ve yanıtta yer alan dokümantasyon bağlantısını artık farklı bir sayfaya görmüyorum.
BiscuitBaker

112

AWS CLI kullanarak arama dosyası adları yapmanın kısa ve çirkin bir yolu :

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

1
aws s3 ls s3: // kovanız - yinelenen | grep your-search Aramam için yeterince iyiydi, teşekkürler Abe Voelker.
adam.2067067

3
Tüm kovalar: aws s3 ls | awk '{3 $ yazdır}' | okunurken satır; echo $ satırı yapın; aws s3 ls s3: // $ satır - yinelenen | aramanızı grep; bitti
Akom

1
ne kesilir -c 32- bu da arama olmadan çalışıyor
sunil

1
cut -c 32-sistemimde 32 karakter alan çıktıdaki zaman damgası ve dosya boyutu bilgisini keser. Buna ihtiyacınız yoktur, ancak çıktıyı başka bir komuta aktarıyorsanız "temiz" çıktıya sahip olmak kullanışlı olabilir.
Abe Voelker

CLI desteği include/exclude. Yani,aws s3 ls s3://bucket --recursive --exclude '*' --include 'myfile*'
Mohnish

25

"Kovayı ara" olarak tanımlanabilecek (en az) iki farklı kullanım durumu vardır:

  1. Grupta depolanan her nesnenin içinde bir şey arayın ; bu, bu gruptaki tüm nesneler (örneğin, metin dosyaları) vb. için ortak bir biçim alır. Böyle bir şey için, Cody Caughlan'ın az önce cevapladığı şeyi yapmak zorunda kalırsınız. AWS S3 belgeleri, bunun Java için AWS SDK ile nasıl yapılacağını gösteren örnek kodlara sahiptir: Anahtarları Java için AWS SDK kullanarak (burada ayrıca PHP ve C # örnekleri de bulacaksınız).

  2. Liste öğesi Bu grupta bulunan nesne anahtarlarında bir şey arayın ; S3 yapar sahip kısmi bir sınırlayıcı sonra sonuç çöken ön ek kesin sonuç + izin şeklinde, bu destek. Bu, AWS S3 Geliştirici Kılavuzu'nda daha ayrıntılı olarak açıklanmaktadır . Bu, örneğin, nesne anahtarları olarak "klasörler"

    klasör / alt klasör / file.txt
    Bu kuralı izlerseniz, S3 GUI'lerin çoğu (AWS Konsolu gibi), grubunuzun bir klasör görünümünü gösterir.


içinde öneki kullanılarak için dokümanlar Yakut
James

22

AWS, S3 kovalarını SQL ile sorgulamak için yeni bir Hizmet yayınladı: Amazon Athena https://aws.amazon.com/athena/


2
argh… Anladım… "Athena, Batı ABD'de (N. California) mevcut değil. Lütfen başka bir bölge seçin."
Clintm

2
Sadece grep istedim düşünüyor tüm bu SQL sorgulama ile bir havai
Ali Gajani

4
@Clintm - us-east-1 (N. Virginia) olarak değiştir
slocumro

21

Birden fazla seçenek vardır, hiçbiri basit "tek çekim" tam metin çözümü değildir:

  1. Anahtar adı desen arama : Bazı dize ile başlayan anahtarları arama - anahtar adlarını dikkatli bir şekilde tasarlarsanız, oldukça hızlı bir çözümünüz olabilir.

  2. Anahtarlara ekli meta verileri arama : AWS S3'e bir dosya gönderirken, içeriği işleyebilir, bazı meta bilgileri ayıklayabilir ve bu meta bilgileri özel üstbilgiler biçiminde anahtara ekleyebilirsiniz. Bu, tam içeriği getirmenize gerek kalmadan anahtar adlarını ve başlıklarını almanıza olanak tanır. Arama sırayla yapılmalıdır, bunun için "sql benzeri" arama seçeneği yoktur. Büyük dosyalarla bu çok fazla ağ trafiğinden ve zamandan tasarruf sağlayabilir.

  3. Meta verileri SimpleDB'de depolayın : önceki nokta olarak, ancak meta verileri SimpleDB'de depolayarak. Burada sql benzeri select deyimleri var. Büyük veri kümeleri durumunda, üstesinden gelebilecek SimpleDB sınırlarına (birden çok SimpleDB etki alanında bölüm meta verileri) vurabilirsiniz, ancak gerçekten ileri giderseniz, başka bir metedata türü veritabanı kullanmanız gerekebilir.

  4. İçeriğin sıralı tam metin araması - tüm anahtarların tek tek işlenmesi. Çok yavaş, eğer işlemek için çok fazla anahtarınız varsa.

Bir dosyanın 1440 versiyonunu birkaç yıl boyunca günde bir kez (dakikada bir) saklıyoruz, versiyonlu kova kullanarak kolayca mümkündür. Ancak, eski bir sürüme sahip olmak zaman alır, çünkü biri sırayla sürüme göre gitmelidir. Bazen kayıtlarla basit CSV indeksini kullanıyorum, yayın süresini artı sürüm kimliğini gösterdim, buna sahipim, daha hızlı bir şekilde eski sürüme geçebilirim.

Gördüğünüz gibi, AWS S3 tam metin aramaları için kendi başına tasarlanmamıştır, basit bir depolama hizmetidir.


4

S3 Konsolunda Önek ile Arama

doğrudan AWS Konsolu grup görünümünde.

resim açıklamasını buraya girin

S3-dist-cp kullanarak istediğiniz dosyaları kopyalayın

Binlerce veya milyonlarca dosyanız olduğunda, istenen dosyaları almanın başka bir yolu da dağıtılmış kopyayı kullanarak başka bir konuma kopyalamaktır . Bunu bir Hadoop İşinde EMR'de çalıştırıyorsunuz . AWS ile ilgili en güzel şey, özel S3 sürümleri s3-dist-cp'yi sağlamalarıdır . İstediğiniz dosyaları groupBy alanında normal bir ifade kullanarak gruplamanıza olanak tanır. Bunu örneğin EMR'deki özel bir adımda kullanabilirsiniz

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

AWS konsolu grup görünümünün, filtre uygulayarak dosyaya gitmediği anlaşılıyor. Aradığım dosya (lar) ın bir alt dizesi koşuluyla son derece hızlı sonuçlar döndürebilir. Sonuçları aynı zamanında malikanede almak için AWS konsolu dışında kullanabileceğim bir istemci / araç / API var mı? @ high6. Geçmişte boto kullanmaya çalıştım, ancak en iyi yaklaşım, arama ölçütlerinizi her dosya adına uygulayarak tüm kovayı yinelemek gibi görünüyordu. IE. son derece yavaş
Kopyala ve Yapıştır

4

Windows'daysanız ve güzel bir grepalternatif bulmak için zamanınız yoksa , hızlı ve kirli bir yol olacaktır:

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

ve sonra myfile.txt dosyasında hızlı arama yapın

"Klasör" biti isteğe bağlıdır.

PS, AWS CLI yüklü değilse - burada Chocolatey paket yöneticisini kullanan tek bir astar

choco install awscli

PPS Chocolatey paket yöneticisine sahip değilseniz - alın! Windows'taki hayatınız 10 kat daha iyi olacak. (Chocolatey ile hiçbir şekilde bağlantılı değilim, ama hey, gerçekten olması gereken bir şey).


Kullanıcı awscli'yi choco kurabilirse, grep'i kurabilir, değil mi? Veya pencerelerin yerel bulmasını mu kullanıyorsunuz?
Dean Radcliffe

2

AWS'de olduğunuz göz önüne alındığında ... Onların CloudSearch araçlarını kullanmak isteyeceğinizi düşünürüm. Aramak istediğiniz verileri hizmetlerine koyun ... S3 tuşlarını göstermesini sağlayın.

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


7
Gerçekten OP ne aradığını
Clintm

benim için bu tüm verileri kaydetmek anlamına gelir - verilerin çoğaltılması
BG Bruno

1

Başka bir seçenek de S3 kovasını web sunucunuza yansıtmak ve yerel olarak geçiş yapmaktır. İşin püf noktası, yerel dosyaların boş olması ve yalnızca iskelet olarak kullanılmasıdır. Alternatif olarak, yerel dosyalar normalde S3'ten almanız gereken yararlı meta verileri tutabilir (örn. Dosya boyutu, mime türü, yazar, zaman damgası, uuid). Dosyayı indirmek için bir URL sağladığınızda, yerel olarak arama yapın ve S3 adresine bir bağlantı sağlayın.

Yerel dosya dolaşımı kolaydır ve S3 yönetimi için bu yaklaşım dil bilincidir. Yerel dosya geçişi ayrıca, bir dosya veritabanının korunmasını ve sorgulanmasını veya grup içeriğini doğrulamak ve almak için bir dizi uzak API çağrısı yapılmasını geciktirir.

Kullanıcıların FTP veya HTTP aracılığıyla doğrudan sunucunuza dosya yüklemesine izin verebilir ve daha sonra, herhangi bir boyuttaki dosyalar için dizinleri yineleyerek bir grup yeni ve güncellenmiş dosyayı yoğun olmayan zamanlarda Amazon'a aktarabilirsiniz. Amazon'a dosya aktarımı tamamlandığında, web sunucusu dosyasını aynı adda boş bir dosyayla değiştirin. Yerel bir dosyanın herhangi bir dosya boyutu varsa, toplu aktarımını beklediği için doğrudan sunun.


S3 grubunuzda milyonlarca dosya varsa, düğüm depolama alanınızı EXTFS2 / 3 diskinde patlatmanın harika bir yolu ...
tpartee

1

Bunu yaptığım yol: s3'te binlerce dosyam var. Listedeki bir dosyanın özellikler panelini gördüm. Bu dosyanın URI'sini görebilirsiniz ve bunu tarayıcıya yapıştırdım - bir metin dosyasıydı ve güzel bir şekilde oluşturuldu. Şimdi, url'deki uuid'i elimdeki uuid ile değiştirdim ve dosya var.

Keşke AWS'nin bir dosyayı aramak için daha iyi bir yolu olsaydı, ama bu benim için çalıştı.


1

Bu komutu deneyin:

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

Daha sonra, onlarla ne istersen yapmak için belirli dosya türlerini almak için bunu bir grep'e bağlayabilirsiniz.


1
Not: --output textçıktının JSON vb. Değil düz metin olacağını belirtir ve --query 'Contents[].{Key: Key, Size: Size}'yalnızca listenin çıktısını dosya adına ve dosya boyutuna göre filtreler. Arama Key: Keyveya benzeri değildir.
Matt

1

Şu şekilde denedim

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

Bu, dosyanın bulunduğu gerçek yolu verir

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

1

Bu biraz eski bir konu - ama belki de hala arama yapan birine yardım et - ben bir yıl arayan benim.

Çözüm, böyle veriler üzerinde arama yapabileceğiniz " AWS Athena " olabilir

'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/

Şu anda fiyatlandırma 1 TB veri için 5 ABD dolarıdır - bu nedenle, örneğin, bir 1 TB dosya üzerinden 3 kez sorgu arama maliyetiniz 15 ABD dolarıdır - ancak örneğin "dönüştürülen sütun biçiminde" yalnızca 1 sütun varsa, okumak istediğiniz ödeme tutarınız 1 / 3 fiyatı 1,67 $ / TB anlamına gelir.


Maliyet oldukça yüksek olduğu için yoğun arama gerektiren herhangi bir uygulama için uygun görünmüyor ...
tnkh

@tnkh Kabul ediyorum - # s3 ile daha fazla seçenek istiyorum
BG Bruno


0

Kovamdaki desenleri bulmak için aşağıdaki gibi bir şey yaptım

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
  }

Daha büyük kovalar için bu çok fazla zaman alır çünkü tüm nesne özetleri Aws tarafından döndürülür, yalnızca önek ve sınırlayıcıyla eşleşenler değil. Performansı iyileştirmenin yollarını arıyorum ve şimdiye kadar sadece anahtarları adlandırmalı ve bunları kovalarda düzgün bir şekilde düzenlemeliyim.


0

Aynı sorunla karşılaştım. S3'te arama yapmak mevcut durumdan çok daha kolay olmalıdır. Bu nedenle, S3'te arama yapmak için bu açık kaynak aracını uyguladım.

SSEARCH tam açık kaynaklı S3 arama aracıdır. Her zaman performansın kritik faktör olduğunu akılda tutarak uygulandı ve kıyaslamalara göre saniyeler içinde ~ 1000 dosya içeren kovada arama yapıyor.

Kurulum basit. Yalnızca docker-compose dosyasını indirip

docker-compose up

SSEARCH başlatılacak ve sahip olduğunuz herhangi bir grupta herhangi bir şeyi arayabilirsiniz.


0

2020'ye kadar hızlı ilerleyin ve aws-okta'yı 2fa'mız olarak kullanarak, aşağıdaki komut, bu özel kovadaki tüm nesneler ve klasörler (+270.000) arasında yinelemek için yavaşça cehennem gibi çalıştı.

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

0

Amazon Athena'yı kullanarak S3 kovasını sorgulayın. Ayrıca Amazon Elastik aramasına veri yükleyin. Bu yardımcı olur umarım.


0

Teknik bir cevap değil, ancak joker karakter aramasına izin veren bir uygulama geliştirdim: https://bucketsearch.net/

Kovanınızı eşzamansız olarak dizine ekler ve ardından sonuçları aramanıza olanak tanır.

Kullanmak ücretsizdir (bağış yazılımı).


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.