Похоже, вам нужно перезаписать объект самим собой, используя «PUT Object (Copy)» с заголовком x-amz-metadata-directive: REPLACE
в дополнение к метаданным. В boto это можно сделать так:
k = k.copy(k.bucket.name, k.name, {'myKey':'myValue'}, preserve_acl=True)
Обратите внимание, что любые метаданные, которые вы не включили в старый словарь, будут удалены. Таким образом, чтобы сохранить старые атрибуты, вам нужно сделать что-то вроде:
k.metadata.update({'myKey':'myValue'})
k2 = k.copy(k.bucket.name, k.name, k.metadata, preserve_acl=True)
k2.metadata = k.metadata # boto gives back an object without *any* metadata
k = k2;
Я почти пропустил это решение, на которое намекают во вступлении к некорректно озаглавленному вопросу, на самом деле о проблеме, отличной от этого вопроса: Изменить расположение содержимого существующего объекта S3