Из кода, вставленного выше, похоже, что вы просто пропустили закрывающую скобку в своем вызове put
.Синтаксис, который вы использовали выше, работал, когда я тестировал его:
>>> s3 = client.resource('s3')
>>> obj = s3.Bucket('my_bucket').Object('my_key')
>>> obj.put(Metadata={'foo': 'bar'})
{u'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'ResponseMetadata': {'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HostId': ...
>>> print obj.metadata
{'foo': 'bar'}