Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 获取S3 bucket列表并向其添加标记_Python 3.x_Amazon S3 - Fatal编程技术网

Python 3.x 获取S3 bucket列表并向其添加标记

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'

在我的用例中,我尝试获取我帐户中的所有S3存储桶,从一个给定的名称开始,然后向它们添加一个标记。下面是我的代码(对于Python来说是新手,我可能错过了一些东西),一旦我创建了一个所有bucket的列表,我想读回它并在其中逐个添加标记。目前,我在线路上遇到了错误

bucket_tagging=s3.Buckettaging(列表[i])

我想,这不是我通过名单的方式。如有任何意见,将不胜感激。多谢各位

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工作得很好,并且它们没有端点加速。查看是否可以缩小导致问题的代码范围,并创建另一个问题。