【问题标题】:Using boto to delete all buckets使用 boto 删除所有存储桶
【发布时间】:2018-07-16 21:36:15
【问题描述】:

我的任务是创建一个脚本来删除所有当前的 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 没有直接删除所有文件夹的选项。

【问题讨论】:

  • 最好使用boto3 s3客户端。它有一个功能 - list_buckets 返回一个字典。您可以对其进行迭代以清空存储桶。事实上,您可以使用一次接受 1000 个键的 delete_objects 函数。 boto3.readthedocs.io/en/latest/reference/services/…boto3.readthedocs.io/en/latest/reference/services/…
  • 一个快速警告 - 如果您的存储桶具有“面向人”的名称 - 即“mybucket”而不是自动生成的名称(如 GUID),那么您将面临丢失该存储桶名称的风险在删除它们和重新创建它们之间。如果您不关心名称,那可能不是问题。
  • awscli 支持删除存储桶,即使它包含对象:docs.aws.amazon.com/AmazonS3/latest/dev/…
  • 不应该conn.get_bucket('i') 更像conn.get_bucket(i)

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


【解决方案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()

【讨论】:

  • 感谢您的帮助。这给了我倒数第二行的错误“'s3.Bucket' object has no attribute 'object'”。我想知道问题是否在我身上。
  • 我打错了!对于那个很抱歉。应该是s3_bucket.objects.all().delete。我已经更新了答案
  • 谢谢。我遇到了一些凭据错误,但我会与 boto 团队核实。感谢您的帮助!
  • 为我工作,我猜现在 2020 年唯一的变化是 client = boto3.client('s3') 而不是 client = session.client('s3'),谢谢!
猜你喜欢
  • 2018-09-14
  • 2022-10-19
  • 1970-01-01
  • 2021-06-22
  • 2014-04-22
  • 2019-01-23
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多