Настроить событие s3 для альтернативной операции PUT - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть лямбда-функция, которая срабатывает всякий раз, когда объект создается в корзине s3.

Теперь мне нужно запустить лямбду для создания альтернативного объекта.Лямбда не должна запускаться при создании объекта в первый, третий, пятый и т. Д. Времени.Но лямбда должна срабатывать во второй, четвертый, шестой и т. Д. Времени.

Для этого я создал событие s3 для операции «PUT».Первый раз я использовал PUT API.Во второй раз, когда я загрузил файл, используя -

s3_res.meta.client.upload_file

Я подумал, что он не будет запускать лямбда, так как это была загрузка, а не PUT.Но это также вызвало лямбду.

Есть ли способ для этого?

1 Ответ

0 голосов
/ 22 апреля 2019

Причина, по которой meta.client.upload_file запускает ваше PUT событие, заключается в том, что фактически использует PUT.

upload_file ( документы ) использует клиент TransferManager, который использует PUT под капотом (это можно увидеть в коде: https://github.com/boto/s3transfer/blob/develop/s3transfer/upload.py)

Взглянув на AWS-SDK, вы увидите, что POST в S3 в значительной степени ограничен тем, когда вы хотите дать браузеру / клиенту предварительно подписанный URL-адрес, по которому они будут загружать файл. (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)

Если вы хотите посчитать, сколько раз был вызван PUT, чтобы выполнить действие для каждого четного вызова, то проще всего использовать что-то вроде DynamoDB для создания таблицы с именем файла 'vs' put-count ', который вы обновляете с каждым PUT и действием соответственно.

В качестве альтернативы вы можете включить ведение версий файла корзины. Затем вы можете использовать list_object_versions, чтобы увидеть, сколько раз файл обновлялся. Хотя вы должны знать, что S3 в конечном итоге непротиворечив, поэтому это может быть неточным, если файл быстро обновляется.

...