передача дополнительных значений в уведомление о событии s3 для потребления лямбда

Мне нужно написать код на языке реагирования, который позволяет пользователю загружать видео на amazon s3 для перекодирования для использования на различных устройствах. Для обработки после загрузки; Я рассматриваю два подхода:

1) Я могу использовать Lambda с ffmpeg для обработки перекодирования сразу после загрузки (я опасаюсь, что это будет время, необходимое для перекодирования видео, и влияние на цену, если это займет значительное количество времени).

2) Я могу сделать так, чтобы s3 передал сообщение sns в оставшийся API после того, как произойдет созданное событие, а остальные API сгенерируют сообщение rabbitmq, которое будет обработано рабочим, который выполнит транскодирование с использованием ffmpeg.

Вариант 1) кажется предпочтительным с точки зрения времени завершения. Насколько я должен быть обеспокоен использованием 1) с учетом того, сколько времени может занять перекодирование видео по сравнению с вариантом 2)?

Кроме того, несмотря ни на что, мне нужен способ передачи дополнительных параметров в лямбду или через сообщения sns, которые позволили бы мне каким-то образом связать пользователя, загрузившего видео, с его учетной записью. Есть ли способ передать дополнительные текстовые значения в s3, чтобы передать их лямбда или sns, когда загрузка завершится, в качестве предостережения я планирую загрузить видео непосредственно в s3, используя оставшийся слой (нашел этот ответ здесь: http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html#RESTObjectPUT-responses-examples)?


person user1790300    schedule 07.09.2017    source источник


Ответы (1)


AWS предоставляет услугу транскодирования видео именно для таких задач. Если вы по какой-то причине не хотите этого делать, вам нужно убедиться, что вы можете выполнить свои задачи по транскодированию в AWS Lambda менее чем за 5 минут. Не уверен, откуда берется второй вариант использования RabbitMQ и воркеров. Почему RabbitMQ вместо SQS? Будут ли работники процессами на серверах EC2 вместо функций Lambda?

Что касается вашего другого вопроса, вам нужно передать эти дополнительные параметры в качестве полей метаданных в объекте S3. В документе, на который вы ссылаетесь, посмотрите, как работает x-amz-meta-. Затем, когда вы позже извлечете объект из S3 для его перекодирования, вы сможете одновременно получить поля метаданных.

person Mark B    schedule 07.09.2017
comment
Плата начинает складываться с использованием услуг транскодирования. Усвоил урок из среды AWS. Меньше 5 минут? Что происходит в стоимости более 5 минут? - person user1790300; 08.09.2017
comment
Один вызов AWS Lambda не может выполняться более 5 минут. Вот почему я так сказал. Если одна задача транскодирования занимает более 5 минут, вам нужно либо выяснить, как разделить ее на несколько вызовов Lambda, либо вы не сможете использовать Lambda. - person Mark B; 08.09.2017