Запуск лямбда-функции AWS на существующих изображениях S3 - PullRequest
0 голосов
/ 04 июля 2018

Я пишу лямбда-функцию AWS в Node.js для изменения размера изображения и запускаю ее при загрузке изображений. У меня уже есть более 1 000 000 изображений в корзине.

Я хочу запустить эту лямбда-функцию на этих изображениях, но пока ничего не нашел.

Как запустить функцию AWS lamdba для существующих образов корзины S3?

Примечание: - Я знаю, что этот вопрос уже задавался о переполнении стека, но проблема в том, что до сих пор их решение не дано

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Да, это совершенно верно, что лямбда не может быть вызвана объектами, уже присутствующими в вашем контейнере s3, но вызывать лямбду вручную для каждого объекта - совершенно глупая идея.

С помощью некоторых хитроумных приемов вы можете легко выполнять свои задачи на этих изображениях:

  1. Трудный путь состоит в том, чтобы создать локальную программу, которая точно выполняет ту же функцию, что и ваша лямбда-функция, но добавила еще две вещи: сначала вам нужно перебрать каждый объект в вашей корзине, затем выполнить код и затем сохраните его по пути назначения s3 после изменения размера. То есть, для всех изображений, уже сохраненных в вашей корзине s3, вместо использования лямбды вы изменяете размеры изображений локально на вашем компьютере и сохраняете их обратно в место назначения s3.

  2. Самый простой способ - сначала убедиться, что вы настроили тип события уведомления s3 как Объект создан (Все) как триггер для вашей лямбды.

enter image description here

Затем, после этого, переместите все свои уже сохраненные изображения в новое временное ведро , а затем переместите эти изображения обратно в оригинальное ведро , вот как ваша лямбда будет срабатывать для каждого изображения автоматически. Вы можете легко выполнить задачу перемещения, используя SDK, предоставленные AWS. Например, для перемещения файлов с использованием boto3 в python вы можете сослаться на эту ссылку на пример перемещения в python, используя boto3

  1. Вместо использования перемещения, т. Е. вырезания и вставки , вы также можете использовать команды копирования и вставки .
0 голосов
/ 30 июля 2019

В дополнение к комментарию Маусама Шармы вы можете запустить копию между корзинами, используя aws cli:

aws s3 sync s3://SOURCE-BUCKET-NAME s3://DESTINATION-BUCKET-NAME --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME

отсюда: https://medium.com/tensult/copy-s3-bucket-objects-across-aws-accounts-e46c15c4b9e1

0 голосов
/ 04 июля 2018

К сожалению, лямбда не может автоматически запускаться для объектов, которые уже существуют в корзине S3.

Вам придется вызывать вашу лямбда-функцию вручную для каждого изображения в вашей корзине S3.

Во-первых, вам нужно составить список существующих объектов в вашей корзине S3, используя действие ListObjectsV2 .

Для каждого объекта в вашей корзине S3 вы должны затем вызвать вашу лямбда-функцию и предоставить информацию об объекте S3 в виде Payload.

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