/photos
이라는 접두어 (또는 "폴더")가있는 AWS S3 버킷이 있습니다. 그것은 "많은 양의 이미지 파일을 포함하고 더 적은 파일 EVENT.json
을 포함합니다. 본래의 표현은 다음과 같습니다 boto3을 사용하여 특정 파일 이름과 일치하는 S3 객체
- 내-멋진-이벤트 버킷
- 사진
- 에서는 image1.jpg
- 에서는 image2.jpg
- 1_EVENT.json
- 에게 image3.jpg
- 2_EVENT.json ,
- ...
EVENT.json
파일 - 사진
버킷이 커지면 결과를 페이징하는 데 관심이 있습니다. S3에서 한 번에 한 페이지 만 요청하면됩니다. 내가 겪고있는 문제는 "EVENT"라는 단어가 포함 된 키에 의해 특별히 페이지를 지정하고자한다는 것입니다. 모든 객체를 다시 가져 오지 않고 결과를 필터링하거나 반복하지 않으면이 작업을 수행하기가 어렵습니다.
S3 Paginator을 사용하면 페이징 작업을 할 수 있습니다.
/photos/
/photos/image1.jpg
/photos/image2.jpg
/photos/1_EVENT.json
/photos/image3.jpg
/photos/2_EVENT.json
S3의 평면 구조는 접두사에 따라 양동이에 모든 객체를 통해 페이징 및 제한 것을 의미
및 내 PageSize
및 MaxItems
6으로 설정되어 가정하면, 이것은 내 첫 페이지를 다시 얻을 수 있습니다 것입니다 페이징 매개 변수에 따라 페이징. 즉, 페이지에 따라 EVENT.json 파일을 여러 개 가져올 수도 있고 전혀 가져갈 수도 없습니다. 첫째 모든 객체를 요청하고 어떤 방법으로 설정 한 결과를 슬라이스 할 필요없이
/photos/1_EVENT.json
/photos/2_EVENT.json
/photos/3_EVENT.json
/photos/4_EVENT.json
/photos/5_EVENT.json
/photos/6_EVENT.json
;
그래서 나는이의 라인을 따라 뭔가 더 찾고 있어요 나는 현재하고있어 정확히 어떤 :client = boto3.client('s3')
paginator = client.get_paginator('list_objects_v2')
page_iterator = paginator.paginate(
Bucket=app.config.get('S3_BUCKET'),
Prefix="photos/") # Left PaginationConfig MaxItems & PageSize off intentionally
filtered_iterator = page_iterator.search(
"Contents[?contains(Key, `EVENT`)][]")
for page in filtered_iterator:
# Do stuff.
pass
위를 정말 비싼, 아니 페이징으로, 그러나 그것은 나에게 내 "이벤트"검색 문자열을 포함하는 모든 파일의 목록을 제공한다.
구체적으로는 의 결과 만 EVENT.json 개체는 S3을 통해 boto3을 사용하여 요청할 때마다 모든 개체를 반환하고 필터링하는 오버 헤드없이 처리해야합니다. 그게 가능하니?
EDIT : 나는 이미 photos/
접두어가 붙은 개체로 요청을 좁히고 있습니다. 내 버킷에는 EVENT 파일을 포함 할 수있는 다른 "폴더"가 있기 때문입니다. 따라서 EVENT 또는 EVENT를 사용할 수 없습니다.응답이 다른 폴더의 파일에 의해 오염 될 수 있으므로 json을 내 접두사로 사용하십시오.
Amazon S3 콘텐츠 목록이 필요하고 완벽하게 최신 버전이 필요하지 않은 경우 [Amazon S3 Storage Inventory] (http://docs.aws.amazon.com/AmazonS3/)를 사용할 수 있습니다. 최신/dev/storage-inventory.html) S3 버킷에있는 모든 파일의 일일 CSV를 저장합니다. –
@JohnRotenstein 저장소 인벤토리는 결과를 페이징하는 데 도움이되는 추가 구조를 제공하지 않는 것으로 보이며 [설명서] (http://docs.aws.amazon.com/AmazonS3/latest)에 따라 접두어로 카탈로그로 제한됩니다. /dev/storage-inventory.html#storage-inventory-how-to-setup). 그러나이를 사용하여 지정된 접두사가있는 EVENT 파일의 인벤토리를 만들고 유지 관리 할 수 있다면 예약 된 인벤토리가 기다릴 가치가 있습니다. – afilbert