2016-03-16 2 views
4

В настоящее время у нас есть несколько ковшей с префиксом приложения и суффикс области , например. Имена ковшовыеПолучите все ведра s3 с префиксом

  • MyApp-нас-восток-1
  • MyApp-нас-запад-1

Есть ли способ найти все ковши при определенном префиксом? Есть ли что-то вроде:

s3 = boto3.resource('s3') 
buckets = s3.buckets.filter(Prefix="myapp-") 
+0

Я просто добавить код, который дело с приставкой листингом ведра в моем ответе :-D – mootmoot

+0

Если проверить каждый boto3 ec2.describe_ * функция, вы заметите, что единственный универсальный формат фильтр является тегом. – mootmoot

ответ

10

Коллекция высокого уровня s3.buckets.filter (Filters = somefilter) работает только для способов, которые документируют в разделе описания_текстов Filter (список). В таком случае, вы должны пометить ведро (s3.BucketTagging), прежде чем вы можете использовать очень специфический метод фильтрации s3.buckets.filter (Filters = formatted_tag_filter) (http://boto3.readthedocs.org/en/latest/reference/services/ec2.html#EC2.Client)

ИМХО, мечения является обязательным, если вы планируете для управления любым ресурсом внутри AWS.

В настоящее время, вы можете сделать это

s3 = boto3.resource('s3') 
for bucket in s3.buckets.all(): 
    if bucket.name.startswith("myapp-")" 
    print bucket.name 

И Ниже приведен пример кода с учетом отфильтровывать КЛЮЧИ (не ведро) (http://boto3.readthedocs.org/en/latest/guide/collections.html)

# S3 list all keys with the prefix '/photos' 
s3 = boto3.resource('s3') 
for bucket in s3.buckets.all(): 
    if bucket.name.startswith("myapp-")" : 
     for obj in bucket.objects.filter(Prefix='/photos'): 
      print('{0}:{1}'.format(bucket.name, obj.key)) 

И Существует предупреждение отмечает, используя выше пример:

Предупреждение: За кулисами в приведенном выше примере много раз будут вызываться ListBuckets, ListObjects и HeadObject. Если у вас есть большое количество объектов S3, это может повлечь значительные затраты.

3

При получении списка ведрами из службы S3, вы используете GET / операцию на обслуживание S3.

Docs: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTServiceGET.html

Эта функция не принимает никаких параметров запроса, так что нет фильтрации осуществляется на стороне сервера.

Если вы хотите отфильтровать на основе вашего префикса, вам необходимо получить весь список ковшей, а затем отфильтровать его самостоятельно.

+0

Да, это тоже было мое впечатление. Просто у boto3 есть метод 'filter()' на ведрах.http: //boto3.readthedocs.org/en/latest/reference/services/s3.html#S3.ServiceResource.filter, но нет информации о том, что являются параметрами. Мне придется копаться в коде. – RAbraham

Смежные вопросы