Я пишу процедуру Python 3 AWS Lambda, которая возьмет корзину S3 и ключ (source_key) из объекта события Lambda и скопирует файл в другую корзину S3 с тем же значением ключа (Destination_key).
Однако ключ S3 в объекте события кодируется таким образом, что, когда я использую значение source_key для записи в целевое ведро, S3 выдает ошибку 404.
Ключ, возвращаемый объектом S3 Lambda Event:
'object': {'key': 'SBN-Fwd_+USPS+-+Springdale%2C+OH+-+Mail+Processing+Facility+-+Bid+Extension+Notice.eml'
Ошибка при отправке значения ключа обратно на S3:
{'Error': {'Code': 'NoSuchKey', 'Message': 'The specified key does not exist.', 'Key': 'SBN-Fwd_+USPS+-+Springdale%2C+OH+-+Mail+Processing+Facility+-+Bid+Extension+Notice.eml'}, 'ResponseMetadata': {'RequestId': '2C0154D58032B5B4', 'HostId': 'zxp56SHdODohW5ln8B5GOW+YPqGfL4/kJGD+qV46yMhLZU92BrOC/hlh/HPHywAuGuJiICL0RFk=', 'HTTPStatusCode': 404, 'HTTPHeaders': {'x-amz-request-id': '2C0154D58032B5B4', 'x-amz-id-2': 'zxp56SHdODohW5ln8B5GOW+YPqGfL4/kJGD+qV46yMhLZU92BrOC/hlh/HPHywAuGuJiICL0RFk=', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'date': 'Thu, 20 Sep 2018 16:40:00 GMT', 'server': 'AmazonS3'}, 'RetryAttempts': 0}}
Я просто использовал boto3 для копирования source_key в destination_key при указании другого сегмента.
copy_source = {'Bucket': source_bucket, 'Key': source_key}
destination_key = source_key
s3resource.copy(copy_source ,destination_bucket, destination_key)
Эта процедура прекрасно работает, если в source_key нет никаких странных символов (пробел, запятая и т. Д.)
Как мне обработать source_key, чтобы убедиться, что он совместим как пункт назначенияключ?Я не смог найти никакой документации о том, что ожидает S3 для кодирования.