如何在不使用 boto3 删除现有标签的情况下向 S3 存储桶添加标签?
How to add tags to an S3 Bucket without deleting the existing tags using boto3?
我正在使用这个功能:
s3 = boto3.resource('s3')
bucket_tagging = s3.BucketTagging(bucket)
Set_Tag = bucket_tagging.put(Tagging={'TagSet':[{'Key':'Owner', 'Value': owner}]})
它正在删除现有的标签,我只能看到一个标签。
我会使用以下内容
s3 = boto3.resource('s3')
bucket_tagging = s3.BucketTagging('bucket_name')
tags = bucket_tagging.tag_set
tags.append({'Key':'Owner', 'Value': owner})
Set_Tag = bucket_tagging.put(Tagging={'TagSet':tags})
这会获取现有标签,添加一个新标签,然后将它们全部放回去。
我遇到了同样的问题,用我自己的方法解决了:
import boto3
def set_object_keys(bucket, key, update=True, **new_tags):
"""
Add/Update/Overwrite tags to AWS S3 Object
:param bucket_key: Name of the S3 Bucket
:param update: If True: appends new tags else overwrites all tags with **kwargs
:param new_tags: A dictionary of key:value pairs
:return: True if successful
"""
# I prefer to have this var outside of the method. Added for completeness
client = boto3.client('s3')
old_tags = {}
if update:
old = client.get_object_tagging(
Bucket=bucket,
Key=key,
)
old_tags = {i['Key']: i['Value'] for i in old['TagSet']}
new_tags = {**old_tags, **new_tags}
response = client.put_object_tagging(
Bucket=bucket,
Key=key,
Tagging={
'TagSet': [{'Key': str(k), 'Value': str(v)} for k, v in new_tags.items()]
}
)
return response['ResponseMetadata']['HTTPStatusCode'] == 200
然后您在函数调用中添加标签:
set_object_keys(....., name="My Name", colour="purple")
这将添加新标签并更新现有标签
================ 桶级标记 ================
import boto3
session = boto3.session.Session(profile_name='default')
client = session.client('s3', 'ap-southeast-2')
def set_bucket_tags(bucket, update=True, **new_tags):
old_tags = {}
if update:
try:
old = client.get_bucket_tagging(Bucket=bucket)
old_tags = {i['Key']: i['Value'] for i in old['TagSet']}
except Exception as e:
print(e)
print("There was no tag")
new_tags = {**old_tags, **new_tags}
response = client.put_bucket_tagging(
Bucket=bucket,
Tagging={
'TagSet': [{'Key': str(k), 'Value': str(v)} for k, v in new_tags.items()]
}
)
print(response)
您可以标记任意数量[AWS 接受的数量]
set_bucket_tags("selim.online", True, key1="value1", key2="value2", key3="value3")
我正在使用这个功能:
s3 = boto3.resource('s3')
bucket_tagging = s3.BucketTagging(bucket)
Set_Tag = bucket_tagging.put(Tagging={'TagSet':[{'Key':'Owner', 'Value': owner}]})
它正在删除现有的标签,我只能看到一个标签。
我会使用以下内容
s3 = boto3.resource('s3')
bucket_tagging = s3.BucketTagging('bucket_name')
tags = bucket_tagging.tag_set
tags.append({'Key':'Owner', 'Value': owner})
Set_Tag = bucket_tagging.put(Tagging={'TagSet':tags})
这会获取现有标签,添加一个新标签,然后将它们全部放回去。
我遇到了同样的问题,用我自己的方法解决了:
import boto3
def set_object_keys(bucket, key, update=True, **new_tags):
"""
Add/Update/Overwrite tags to AWS S3 Object
:param bucket_key: Name of the S3 Bucket
:param update: If True: appends new tags else overwrites all tags with **kwargs
:param new_tags: A dictionary of key:value pairs
:return: True if successful
"""
# I prefer to have this var outside of the method. Added for completeness
client = boto3.client('s3')
old_tags = {}
if update:
old = client.get_object_tagging(
Bucket=bucket,
Key=key,
)
old_tags = {i['Key']: i['Value'] for i in old['TagSet']}
new_tags = {**old_tags, **new_tags}
response = client.put_object_tagging(
Bucket=bucket,
Key=key,
Tagging={
'TagSet': [{'Key': str(k), 'Value': str(v)} for k, v in new_tags.items()]
}
)
return response['ResponseMetadata']['HTTPStatusCode'] == 200
然后您在函数调用中添加标签:
set_object_keys(....., name="My Name", colour="purple")
这将添加新标签并更新现有标签
================ 桶级标记 ================
import boto3
session = boto3.session.Session(profile_name='default')
client = session.client('s3', 'ap-southeast-2')
def set_bucket_tags(bucket, update=True, **new_tags):
old_tags = {}
if update:
try:
old = client.get_bucket_tagging(Bucket=bucket)
old_tags = {i['Key']: i['Value'] for i in old['TagSet']}
except Exception as e:
print(e)
print("There was no tag")
new_tags = {**old_tags, **new_tags}
response = client.put_bucket_tagging(
Bucket=bucket,
Tagging={
'TagSet': [{'Key': str(k), 'Value': str(v)} for k, v in new_tags.items()]
}
)
print(response)
您可以标记任意数量[AWS 接受的数量]
set_bucket_tags("selim.online", True, key1="value1", key2="value2", key3="value3")