Использование лямбда-функции в Amazon S3
Сервис Amazon S3 используется для хранения файлов, куда вы можете загружать или удалять файлы. Мы можем активировать AWS Lambda на S3, когда есть какие-либо загрузки файлов в сегменты S3. AWS Lambda имеет функцию-обработчик, которая действует как отправная точка для функции AWS Lambda. В обработчике есть детали событий. В этой главе давайте посмотрим, как использовать AWS S3 для запуска функции AWS Lambda, когда мы загружаем файлы в корзину S3.
Шаги по использованию AWS Lambda Function с Amazon S3
Чтобы начать использовать AWS Lambda с Amazon S3, нам понадобится следующее:
- Создать сегмент S3
- Создайте роль, у которой есть разрешение на работу с s3 и лямбда
- Создайте лямбда-функцию и добавьте s3 в качестве триггера.
пример
Давайте посмотрим эти шаги на примере, который показывает базовое взаимодействие между Amazon S3 и AWS Lambda.
Пользователь загрузит файл в корзину Amazon S3
После загрузки файла в фоновом режиме запускается функция AWS Lambda, которая отображает вывод в виде консольного сообщения о том, что файл загружен.
Пользователь сможет увидеть сообщение в журналах Cloudwatch после загрузки файла.
Блок-схема, которая объясняет поток примера, показана здесь -
Создание сегмента S3
Давайте начнем сначала с создания корзины s3 в консоли AWS, используя шаги, указанные ниже:
Шаг 1
Зайдите в сервисы Amazon и нажмите S3 в разделе хранения, как показано на изображении ниже -
Шаг 2
Щелкните Хранилище S3 и Create bucket в котором будут храниться загруженные файлы.
Шаг 3
Как только вы нажмете Create bucket кнопку, вы можете увидеть следующий экран -
Шаг 4
Введите детали Bucket name, Select the Region и нажмите Createкнопку внизу слева. Таким образом, мы создали ведро с именем:workingwithlambdaands3.
Шаг 5
Теперь щелкните имя корзины, и она попросит вас загрузить файлы, как показано ниже -
Таким образом, мы закончили создание корзины в S3.
Создайте роль, которая работает с S3 и Lambda
Чтобы создать роль, которая работает с S3 и Lambda, выполните шаги, указанные ниже -
Шаг 1
Перейдите в сервисы AWS и выберите IAM, как показано ниже -
Шаг 2
Теперь нажмите IAM -> Roles как показано ниже -
Шаг 3
Теперь нажмите Create roleи выберите службы, которые будут использовать эту роль. Выберите Lambda и нажмитеPermission кнопка.
Шаг 4
Добавьте разрешение снизу и нажмите Review.
Шаг 5
Обратите внимание, что мы выбрали следующие разрешения -
Обратите внимание, что выбранные нами политики AmazonS3FullAccess, AWSLambdaFullAccess а также CloudWatchFullAccess.
Шаг 6
Теперь введите имя роли, описание роли и нажмите Create Role кнопку внизу.
Таким образом, наша роль под названием lambdawiths3service создано.
Создать лямбда-функцию и добавить триггер S3
В этом разделе давайте посмотрим, как создать лямбда-функцию и добавить к ней триггер S3. Для этого вам нужно будет выполнить шаги, указанные ниже -
Шаг 1
Перейдите в AWS Services и выберите Lambda, как показано ниже -
Шаг 2
Нажмите Lambda и следуйте процессу добавления Name. ВыбратьRuntime, Roleи т.д. и создайте функцию. Созданная нами лямбда-функция показана на скриншоте ниже -
Шаг 3
Теперь добавим триггер S3.
Шаг 4
Выберите триггер сверху и добавьте детали, как показано ниже -
Шаг 5
Выберите сегмент, созданный в раскрывающемся списке сегментов. Тип события имеет следующие детали -
Выбрать Object Created (All), поскольку нам нужен триггер AWS Lambda при загрузке, удалении файла и т. д.
Шаг 6
Вы можете добавить префикс и шаблон файла, которые используются для фильтрации добавленных файлов. Например, чтобы активировать лямбда только для изображений .jpg. Пока оставим это поле пустым, так как нам нужно активировать Lambda для всех загруженных файлов. НажмитеAdd кнопку, чтобы добавить триггер.
Шаг 7
Вы можете найти отображение триггера для функции лямбда, как показано ниже -
Добавим подробности лямбда-функции aws. Здесь мы будем использовать онлайн-редактор, чтобы добавить наш код и использовать nodejs в качестве среды выполнения.
Шаг 8
Чтобы запустить S3 с AWS Lambda, нам нужно будет использовать событие S3 в коде, как показано ниже -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Обратите внимание, что параметр события содержит подробную информацию о событии S3event. Мы согласовали имя корзины и имя файла, которые будут регистрироваться при загрузке изображения в S3bucket.
Шаг 9
Теперь давайте сохраним изменения и протестируем лямбда-функцию с помощью S3upload. Ниже приведены детали кода, добавленные в AWS Lambda:
Шаг 10
Теперь давайте добавим роль, память и тайм-аут.
Шаг 11
Теперь сохраните лямбда-функцию. Откройте S3 из сервисов Amazon и откройте корзину, которую мы создали ранее, а именноworkingwithlambdaands3.
Загрузите в него изображение, как показано ниже -
Шаг 12
Нажмите Upload кнопку, чтобы добавить файлы, как показано -
Шаг 13
Нажмите Add filesдобавить файлы. Вы также можете перетащить файлы. Теперь нажмитеUpload кнопка.
Таким образом, мы загрузили одно изображение в нашу корзину S3.
Шаг 14.
Чтобы просмотреть сведения о триггере, перейдите в сервис AWS и выберите CloudWatch. Откройте журналы для функции Lambda и используйте следующий код -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Результат, который вы можете наблюдать в Cloudwatch, выглядит следующим образом:
Функция AWS Lambda запускается, когда файл загружается в корзину S3, и сведения регистрируются в Cloudwatch, как показано ниже -