使用boto删除所有存储桶

时间:2018-02-06 18:22:05

标签: python-3.x amazon-web-services amazon-s3 boto

我的任务是创建一个脚本来删除所有当前的S3存储桶并创建一些新的存储桶。这是他们希望持续进行的事情。到目前为止,我已经完成了所有预赛:

import boto
from boto.s3.key import Key
import boto.s3.connection
from __future__ import print_function

conn = boto.s3.connect_to_region('us-east-1',
                                 aws_access_key_id='my_access_key', aws_secret_access_key='my_secret_key')

ls = conn.get_all_buckets()

print(*ls,sep='\n')

这给了我所有当前存储桶的列表。现在,如果我想删除桶,我的理解是它们必须首先清空,使用类似的方法:

db = conn.get_bucket('bucket_name')
for key in db.list():
  key.delete()

然后我可以这样做:

conn.delete_bucket('bucket_name')

我想设置它以便从'ls'中提取每个桶名称,但我不确定如何解决这个问题。我试过这个:

for i in ls:
    db = conn.get_bucket('i')
    for key in db.list():
        key.delete()

但是我收到错误“S3ResponseError:400 Bad Request”。我有一种潜在的怀疑,认为它没有从列表中拉出单独的元素。我可能需要涉及数据框吗?据我所知,boto没有选择直接核对所有文件夹。

1 个答案:

答案 0 :(得分:1)

我建议使用boto3

以下应该可以做到这一点,虽然它没有经过测试(我不想删除我的所有桶)。)

import boto3

client = session.client('s3')
s3 = boto3.resource('s3')

buckets = client.list_buckets()

for bucket in buckets['Buckets']:
    s3_bucket = s3.Bucket(bucket['Name'])
    s3_bucket.objects.all().delete()
    s3_bucket.delete()