【发布时间】: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