获取所有带有前缀的s3存储桶

RAb*_*ham 5 amazon-s3 amazon-web-services boto3

目前,我们有多个具有应用程序前缀和区域后缀的存储桶,例如存储桶名称

  • MYAPP美 - 东 - 1
  • MYAPP美西-1

有没有办法找到给定一个前缀的所有桶?是否有类似的东西:

s3 = boto3.resource('s3')
buckets = s3.buckets.filter(Prefix="myapp-")
Run Code Online (Sandbox Code Playgroud)

moo*_*oot 11

高级集合s3.buckets.filter(Filters=somefilter)仅适用于describe_tags过滤器(列表)下的文档方式.在这种情况下,您必须先标记您的bucket(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
Run Code Online (Sandbox Code Playgroud)

以下是过滤掉KEYS(不是桶)的示例代码(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))
Run Code Online (Sandbox Code Playgroud)

并且使用上面的示例有一个警告说明:

警告 在幕后,上面的例子将调用ListBuckets,ListObjectsHeadObject很多次.如果你有大量的S3对象,那么这可能会产生很大的成本.