Python 3.x 获取S3 bucket列表并向其添加标记
在我的用例中,我尝试获取我帐户中的所有S3存储桶,从一个给定的名称开始,然后向它们添加一个标记。下面是我的代码(对于Python来说是新手,我可能错过了一些东西),一旦我创建了一个所有bucket的列表,我想读回它并在其中逐个添加标记。目前,我在线路上遇到了错误 bucket_tagging=s3.Buckettaging(列表[i]) 我想,这不是我通过名单的方式。如有任何意见,将不胜感激。多谢各位Python 3.x 获取S3 bucket列表并向其添加标记,python-3.x,amazon-s3,Python 3.x,Amazon S3,在我的用例中,我尝试获取我帐户中的所有S3存储桶,从一个给定的名称开始,然后向它们添加一个标记。下面是我的代码(对于Python来说是新手,我可能错过了一些东西),一旦我创建了一个所有bucket的列表,我想读回它并在其中逐个添加标记。目前,我在线路上遇到了错误 bucket_tagging=s3.Buckettaging(列表[i]) 我想,这不是我通过名单的方式。如有任何意见,将不胜感激。多谢各位 import boto3 list = [] s3 = boto3.resource('s3'
import boto3
list = []
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
if bucket.name.startswith("bucketPrefix"):
list.append(bucket)
for i in range(len(list)):
bucket_tagging = s3.BucketTagging(list[i])
tags = bucket_tagging.tag_set
tags.append({'Key':'segment', 'Value': 'name'})
Set_Tag = bucket_tagging.put(Tagging={'TagSet':tags})
这似乎有效:
导入boto3
s3_resource=boto3.resource('s3')
对于s3_resource.bucket.all()中的bucket:
如果bucket.name.startswith(“前缀”):
#提取当前标签
尝试:
tag\u set=bucket.Tagging().tag\u set
除:
#没有当前标记
tag_set=[]
#附加标签
tag_to_add={'Key':'segment','Value':'name'}
tag_set=[tag_set中的tag for tag,如果tag['Key']!=tag_to_add['Key']]
bucket.Tagging().put(Tagging={'TagSet':tag_set+[tag_to_add]})
发生了什么错误?我进行了测试,没有出现错误。``>>bucket\u tagging s3.BucketTagging(bucket\u name=s3.bucket(name='xxxxxxxx'))``文件“s3tag.py”,第10行,在tags=bucket\u tagging.tagg\u set文件“C:\Users\sasharma\AppData\Local\Programs\Python\Python38\lib\site packages\boto3\resources\factory.py”中,第339行,在property\u loader self.load()文件中“C:\Users\sasharma\AppData\Local\Programs\Python\38\lib\site packages\botocore\handlers.py”,第231行,在validate\u bucket\u name中,如果无效,则为bucket.search(bucket)和not VALID\u S3\u ARN.search(bucket):类型错误:预期字符串或类似字节的对象您可以尝试bucket\u tagging=S3.buckettaging(列表[i].name)
?这很有帮助,但现在我收到了这个错误,botocore.exceptions.ClientError:调用Putbuckettaging操作时发生了一个错误(InvalidTag):无法使用同一个键提供多个标记感谢John在这里的输入。我收到了这个错误,botocore.exceptions.ClientError:发生了一个错误(InvalidTag)调用PutBucketTagging操作时:无法提供具有相同ke的多个标记。因此,在这种情况下,我有许多bucket以一个公共前缀开始,如xyx dev、xyz qa、xyz prod etcIt。听起来好像您正在尝试添加一个已经存在的标记(例如,段
标记已经存在)。我已经更新了代码,让新标记替换旧标记。好的,John。是否确实需要在存储桶上启用S3传输加速以确保其运行?我有几个存储桶启用了此功能,但很少没有,我收到错误botocore.exceptions.ClientError:发生错误(InvalidRequest)调用PutBucketTagging操作时:此bucket上禁用了S3传输加速。我尝试添加关于启用传输加速的代码,但仍然显示相同的错误S3={“use_Acceleration_endpoint”:True}快速更新:我实际上检查了我的配置文件,并使用了“use\u accelerate\u endpoint=true”,所以我删除了这个参数,它工作得很好。使用上述解决方案的任何人都应该确保从用于S3身份验证的默认配置文件中删除这个参数。代码对我的bucket工作得很好,并且它们没有端点加速。查看是否可以缩小导致问题的代码范围,并创建另一个问题。