Я столкнулся с той же проблемой и решил ее своим собственным методом:
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")
Это добавит новые тегии обновить существующие