Amazon S3 버킷을 어떻게 검색합니까?


답변:


31

S3는 네이티브가 실제 내용부터 "이 버킷 검색"이없는 것은 알 수 - 또한, S3가 제공 ALA보다 전통적인 데이터 스토어를 한 번에 액세스 여러 노드에 네이티브 방법이 없다는 기반 키 / 값이므로 (SELECT * FROM ... WHERE ...)(A SQL에가 모델).

당신이 할 필요가 수행하는 것은 ListBucket당신의 검색 인 - a를 양동이에 개체의 목록 다음으로 반복은 모든 항목에 걸쳐 당신이 구현하는 사용자 정의 작업을 수행을 얻을 수 있습니다.


42
이것은 더 이상 사실이 아닙니다. 아래 rhonda의 답변을 참조하십시오 : stackoverflow.com/a/21836343/1101095
Nate

11
위 의견의 모든 지지자들에게 : OP는 파일 이름 또는 주요 내용 (예 : 파일 내용)을 검색 할 것인지 여부를 나타내지 않습니다. 따라서 @rhonda의 대답은 여전히 ​​충분하지 않을 수 있습니다. S3 콘솔을 사용하는 것은 앱 사용자와 일반 사용자가 거의 사용할 수 없으므로 궁극적으로 소비자에게 맡기는 연습 인 것으로 보입니다. 기본적으로 버킷 소유자 및 / 또는 IAM 역할에만 해당됩니다.
코디 코플란

이러한 버킷 문서를 인덱싱하는 lucene.net과 같은 인덱싱 서비스가 있습니까?
Munavvar

이 답변으로 계속 돌아와서 도움이되는 도구를 만들었습니다. bucketsearch.net- 와일드 카드 검색 허용
Jon M

251

여기에 추가하기위한 참고 사항 : 이제 3 년이 지난 지금 "S3 버킷을 검색하는 방법"을 입력하면이 게시물이 Google에서 1 위를 차지합니다.

아마도 당신은 좀 더 복잡한 것을 찾고있을 것입니다. 그러나 제목으로 객체 (파일)를 찾는 방법을 알아 내려고 여기에 착륙했다면 미친 듯이 간단합니다.

버킷을 열고 오른쪽에서 "없음"을 선택한 다음 파일 이름을 입력하십시오.

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


43
이것이 바로 내가 찾던 것입니다. 끔찍한 사용자 경험 디자인은 제로 시각적해야합니다
키스 Entzeroth

2
버킷에서 파일을 선택한 다음 입력을 시작해야합니다.
cabe56

30
여전히 항목 이름의 접두사로 검색하겠습니다.
Daniel Flippance

21
이것은 절대적으로 분노입니다! 사람들이 오른쪽이나 노란색 상자에서 무언가에 대해 이야기하고 있지만 아무것도 찾을 수 없습니다. 같은 "접두사 입력 ..."메시지 만 표시됩니다. "검색 버킷"은 어떻게 기본값이 아닙니까? 그것은 Atlassian 소프트웨어만큼 거의 발견 할 수 없습니다 ...
vegather

40
이 답변이 여전히 최신입니까? 오른쪽에 '없음'이 표시되지 않으며 답변의 문서 링크가 다른 페이지로 전달됩니다.
비스킷 베이커

112

다음은 AWS CLI를 사용하여 파일 이름을 검색하는 짧고 못생긴 방법입니다 .

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

1
aws s3 ls s3 : // your-bucket-재귀 | grep your-search Abe Voelker에게 감사를 표했습니다.
man.2067067

3
모든 버킷 : AWS S3 LS | awk '{print $ 3}'| 읽는 동안 줄; echo $ line; aws s3 ls s3 : // $ line --recursive | grep 당신의 수색; 완료
Akom

1
이것도없이 절단 -c 32- 검색도 작동합니다
sunil

1
cut -c 32-출력에서 타임 스탬프와 파일 크기 정보를 잘라 내 시스템의 32자를 차지합니다. 필요하지 않지만 출력을 다른 명령으로 파이프하는 경우 "깨끗한"출력을 갖는 것이 편리 할 수 ​​있습니다.
Abe Voelker

CLI가 지원합니다 include/exclude. 그래서,aws s3 ls s3://bucket --recursive --exclude '*' --include 'myfile*'
Mohnish

25

"버킷 검색"으로 설명 할 수있는 두 가지 다른 사용 사례가 있습니다.

  1. 버킷에 저장된 모든 객체 내부 에서 무언가를 검색합니다 . 이것은 해당 버킷의 모든 객체 (예 : 텍스트 파일 등)에 대한 공통 형식을 가정합니다. 이와 같은 경우 Cody Caughlan이 방금 응답 한 것을 수행해야합니다. AWS S3 문서에는 AWS SDK for Java로이 작업을 수행하는 방법을 보여주는 예제 코드 가 있습니다. Java 용 AWS SDK를 사용하여 키 나열 (PHP 및 C # 예제도 있습니다).

  2. 목록 항목 해당 버킷에 포함 된 객체 에서 무언가를 검색합니다 . S3는 않습니다부분 구분 한 후 일치를 무너 접두사 정확히 일치 +를 허용하는 형태로,이에 대한 지원을. 이에 대한 자세한 내용은 AWS S3 개발자 안내서를 참조하십시오 . 이를 통해 예를 들어 다음과 같은 객체 키로 사용하여 "폴더"를 구현할 수 있습니다.

    폴더 / 하위 폴더 /file.txt
    이 규칙을 준수하면 대부분의 S3 GUI (예 : AWS 콘솔)에 버킷의 폴더보기가 표시됩니다.


에 접두사를 사용하는 문서 루비
제임스

22

AWS는 SQL을 사용하여 S3 버킷을 쿼리하는 새로운 서비스를 출시했습니다. Amazon Athena https://aws.amazon.com/athena/


2
"아테나는 미국 서부 (캘리포니아 북부)에서는 사용할 수 없습니다. 다른 지역을 선택하십시오."
Clintm

2
그것은이 모든 SQL 쿼리 고려 I 만 원 그렙와 오버 헤드입니다
알리 Gajani

4
@Clintm-us-east-1 (N. Virginia)로 변경
slocumro

21

여러 가지 옵션이 있지만 간단한 "원샷"전체 텍스트 솔루션은 없습니다.

  1. 키 이름 패턴 검색 : 문자열로 시작하는 키 검색-키 이름을 신중하게 디자인하면 빠른 해결 방법이있을 수 있습니다.

  2. 키에 첨부 된 메타 데이터 검색 : 파일을 AWS S3에 게시 할 때 콘텐츠를 처리하고 일부 메타 정보를 추출한 후이 메타 정보를 사용자 지정 헤더 형태로 키에 첨부 할 수 있습니다. 이를 통해 완전한 컨텐츠를 가져올 필요없이 키 이름과 헤더를 가져올 수 있습니다. 검색은 순차적으로 수행되어야하며 이에 대한 "sql like"검색 옵션이 없습니다. 파일이 크면 많은 네트워크 트래픽과 시간을 절약 할 수 있습니다.

  3. SimpleDB에 메타 데이터를 저장하십시오. 이전 포인트로 메타 데이터를 SimpleDB 에 저장합니다. 여기에는 SQL과 같은 select 문이 있습니다. 큰 데이터 세트의 경우 극복 할 수있는 SimpleDB 제한에 도달 할 수 있지만 (여러 SimpleDB 도메인의 파티션 메타 데이터) 실제로 멀어지면 다른 메타 데이터 유형의 데이터베이스를 사용해야합니다.

  4. 내용의 순차적 전체 텍스트 검색 -모든 키를 하나씩 처리합니다. 처리 할 키가 너무 많으면 매우 느립니다.

버전이 지정된 버킷을 사용하여 2 년 동안 하루에 1440 버전의 파일을 분당 1 개씩 저장하면 쉽게 가능합니다. 그러나 순차적으로 버전을 이동해야하므로 이전 버전을 얻는 데 시간이 걸립니다. 때로는 레코드와 함께 간단한 CSV 인덱스를 사용하여 게시 시간과 버전 ID를 표시하여 이전 버전으로 빠르게 이동할 수 있습니다.

보시다시피, AWS S3는 자체 텍스트 검색 용으로 설계된 것이 아니라 단순한 스토리지 서비스입니다.


4

S3 콘솔에서 접두사로 검색

AWS 콘솔 버킷보기에서 직접

여기에 이미지 설명을 입력하십시오

s3-dist-cp를 사용하여 원하는 파일 복사

수천 또는 수백만 개의 파일이있는 경우 원하는 파일을 얻는 또 다른 방법은 분산 사본을 사용하여 다른 위치로 파일을 복사하는 것 입니다. Hadoop 작업의 EMR 에서 이를 실행합니다 . AWS의 멋진 점은 사용자 정의 S3 버전 s3-dist-cp 를 제공한다는 것 입니다. groupBy 필드에서 정규식을 사용하여 원하는 파일을 그룹화 할 수 있습니다. 예를 들어 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"
    }
]

필터를 적용하여 파일별로 AWS 콘솔 버킷보기가 파일로 이동하지 않는 것 같습니다. 내가 찾고있는 파일의 하위 문자열을 제공하면 매우 빠르게 결과를 반환 할 수 있습니다. AWS 콘솔 이외의 다른 클라이언트를 사용하여 동일한시기에 결과를 얻을 수 있습니다. @ 고 6. 과거에는 boto를 사용하려고 시도했지만 가장 좋은 방법은 모든 파일 이름에 검색 기준을 적용하여 전체 버킷을 반복하는 것으로 나타났습니다. IE. 매우 느림
복사하여 붙여 넣기

4

Windows를 사용 중이고 좋은 grep대안을 찾지 못한 경우 빠르고 더러운 방법은 다음과 같습니다.

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

그런 다음 myfile.txt에서 빠른 검색을 수행하십시오.

"폴더"비트는 선택 사항입니다.

AWS CLI를 설치하지 않은 경우 PS-Chocolatey 패키지 관리자를 사용하는 하나의 라이너

choco install awscli

PPS Chocolatey 패키지 관리자가없는 경우 구입하십시오! Windows에서의 삶은 10 배 향상됩니다. (나는 어떤 식 으로든 Chocolatey와 제휴하지는 않지만 실제로 필수 아이템입니다).


사용자가 choco 설치 awscli를 설치할 수 있다면 grep을 설치할 수 있습니다. 아니면 Windows의 기본 찾기를 사용 하시겠습니까?
Dean Radcliffe

2

AWS에 있다고 가정하면 ... 그들의 CloudSearch 도구를 사용하고 싶다고 생각합니다. 검색하려는 데이터를 서비스에 넣으십시오. S3 키를 가리 킵니다.

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


7
실제로 OP가 무엇을 찾고 있었는지
Clintm

나를 위해 그것은 모든 데이터 저장-데이터 복제
BG Bruno

1

다른 옵션은 웹 서버에서 S3 버킷을 미러링하고 로컬로 순회하는 것입니다. 비결은 로컬 파일이 비어 있고 골격으로 만 사용된다는 것입니다. 또는 로컬 파일은 일반적으로 S3에서 가져와야하는 유용한 메타 데이터 (예 : 파일 크기, 유형, 작성자, 타임 스탬프, UUID)를 보유 할 수 있습니다. 파일을 다운로드 할 URL을 제공 할 경우 로컬로 검색하고 S3 주소에 대한 링크를 제공하십시오.

로컬 파일 탐색이 쉽고 S3 관리를위한이 접근 방식은 언어에 구애받지 않습니다. 로컬 파일 탐색은 파일 데이터베이스 유지 관리 및 쿼리를 피하거나 버킷 내용을 인증하고 가져 오기 위해 일련의 원격 API 호출을 지연시킵니다.

사용자는 FTP 또는 HTTP를 통해 서버에 직접 파일을 업로드 한 다음 크기에 관계없이 파일의 디렉토리를 반복하여 피크가 아닌 시간에 새 파일 및 업데이트 된 파일을 Amazon으로 전송할 수 있습니다. Amazon으로 파일 전송이 완료되면 웹 서버 파일을 동일한 이름의 빈 파일로 바꾸십시오. 로컬 파일에 파일 크기가 있으면 배치 전송 대기 중이므로 직접 제공하십시오.


S3 버킷에 수백만 개의 파일이있는 경우 EXTFS2 / 3 디스크에서 노드 스토리지 공간을 확장하는 좋은 방법 ...
tpartee

1

내가 한 방법은 다음과 같습니다. s3에 수천 개의 파일이 있습니다. 목록에서 한 파일의 속성 패널을 보았습니다. 해당 파일의 URI를 볼 수 있으며 브라우저에 붙여 넣었습니다. 텍스트 파일이었고 멋지게 렌더링되었습니다. 이제 URL의 uuid를 내가 가지고있는 uuid로 바꾸고 파일이 있습니다.

AWS가 파일을 검색하는 더 나은 방법을 원했지만 이것이 효과적이었습니다.


1

이 명령을 시도하십시오 :

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

그런 다음이를 grep에 파이프하여 원하는 파일 형식을 원하는대로 처리 할 수 ​​있습니다.


1
참고 : --output text출력은 JSON 등이 아닌 일반 텍스트가되도록 지정 --query 'Contents[].{Key: Key, Size: Size}'하고 목록의 출력을 파일 이름 및 파일 크기로 필터링합니다. 검색하지 않습니다 Key: Key.
Matt

1

나는 다음과 같은 방법으로 시도했다

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

파일이 존재하는 실제 경로를 출력합니다.

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

1

이것은 약간 오래된 스레드이지만 여전히 검색하는 사람을 도울 수 있습니다-나는 그 해를 검색하는 사람입니다.

해결책은 다음 과 같은 데이터를 검색 할 수 있는 " AWS Athena "일 수 있습니다.

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

현재 1TB 데이터의 경우 가격은 $ 5입니다. 예를 들어 쿼리에서 1TB 파일 하나를 3 번 ​​검색하는 경우 비용은 15 달러입니다. 그러나 예를 들어 "변환 된 원주 형식"의 열이 1 개만있는 경우 1을 지불합니다. 가격의 3 분의 1은 $ 1.67 / TB를 의미합니다.


비용이 꽤 많이
들기

@tnkh 동의합니다-나도 # s3 옵션을 더 원합니다
BG Bruno


0

버킷에서 패턴을 찾기 위해 아래와 같은 작업을 수행했습니다.

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
  }

더 큰 버킷의 경우 접두사 및 구분 기호와 일치하는 항목뿐만 아니라 모든 객체 요약이 Aws에 의해 반환되므로 시간이 너무 많이 소요됩니다. 성능을 향상시킬 수있는 방법을 찾고 있는데 지금까지 키의 이름을 지정하고 버킷에 올바르게 구성해야한다는 것을 알았습니다.


0

나는 같은 문제에 직면했다. S3에서의 검색은 현재 상황보다 훨씬 쉬워야합니다. 그래서 S3에서 검색하기 위해이 오픈 소스 도구를 구현했습니다.

SSEARCH 는 전체 오픈 소스 S3 검색 도구입니다. 성능이 중요한 요소라는 점을 항상 염두에두고 구현되었으며 벤치 마크에 따르면 수초 내에 ~ 1000 개의 파일이 포함 된 버킷을 검색합니다.

설치가 간단합니다. docker-compose 파일 만 다운로드하여 실행하십시오.

docker-compose up

SSEARCH가 시작되고 모든 버킷에서 무엇이든 검색 할 수 있습니다.


0

2020으로 빨리 넘어 가고 다음 명령으로 aws-okta를 2fa로 사용하면이 특정 버킷 (+ 270,000)의 모든 객체와 폴더를 반복하는 것이 느리게 작동합니다.

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

0

Amazon Athena를 사용하여 S3 버킷을 쿼리하십시오. 또한 Amazon Elastic Search에 데이터를로드하십시오. 도움이 되었기를 바랍니다.


0

기술 답변은 아니지만 와일드 카드 검색을 허용하는 응용 프로그램을 만들었습니다. https://bucketsearch.net/

버킷을 비동기 적으로 인덱싱 한 다음 결과를 검색 할 수 있습니다.

무료로 사용할 수 있습니다 (donationware).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.