Как перекодировать AWS Lambda Event кодирование ключа S3 в Python 3? - PullRequest
0 голосов
/ 20 сентября 2018

Я пишу процедуру 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 для кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...