Создайте управляемую событиями архитектуру для подключения потока DynamoDB к Amazon Comprehend для анализа настроений
В рамках своей серии статей о бессерверных технологиях я рассказывал, как построить хорошо спроектированный бэкэнд с сервисами AWS - используя многорегиональный подход и подходы «активно-активный» для обеспечения высокой доступности.
В этом блоге мы будем использовать потоки DynamoDB и Amazon Comprehend, чтобы применить анализ настроений к элементам, хранящимся в вашей глобальной таблице DynamoDB, которую мы разработали и создали в предыдущих публикациях.
Быстрое обновление API
Для начала нам нужно быстро обновить лямбда-функцию, которая обрабатывает POST-запрос.
Единственное отличие от функции предыдущий пост - это дополнительный session_comment, который принимает строку, содержащую комментарий пользователя.
После развертывания вы можете выполнить POST новый элемент с элементом session_comment следующим образом:
Функция GET не изменяется, поскольку изначально она возвращала полный объект, запрошенный item_id.
Тестирование функции GET должно вернуть только что добавленный session_comment следующим образом:
Как я уже упоминал - просто :)
Давайте поговорим о потоках DynamoDB и архитектурах, управляемых событиями
Проще говоря, поток DynamoDB - это упорядоченный по времени поток информации, отражающий изменения элементов в таблице DynamoDB. Изменения могут отражать любое из следующего: Создание, Обновление и Удаление элементов в таблице.
Важно понимать, что DynamoDB Streams гарантирует следующее:
- Каждая запись потока появляется в потоке ровно один раз.
- Для каждого элемента, измененного в таблице DynamoDB, записи потока отображаются в той же последовательности, что и фактические изменения элемента.
Мне нравятся потоки DynamoDB, потому что они идеально вписываются в мою любимую парадигму архитектурного проектирования: архитектура, управляемая событиями. Вместо ожидания или опроса изменений, действия происходят, когда происходят изменения в системе. Конечно, мы много лет говорили об этом архитектурном паттерне, но до недавнего времени его было очень сложно реализовать в масштабе.
Итак, что изменилось? Произошла AWS Lambda. AWS Lambda предоставила каждому возможность вычислений, управляемых событиями, и вывела парадигму, управляемую событиями, на совершенно новый уровень. Сегодня такие компании, как Netflix (Bless) и Capital One (Cloud Custodian), используют управляемые событиями архитектуры на базе AWS Lambda для обеспечения безопасности, соответствия требованиям и управления политиками в реальном времени.
Возвращаясь к потокам DynamoDB - подключение вашего потока к AWS Lambda позволяет выполнять архитектуру, управляемую событиями, с использованием изменений в базе данных в качестве источника событий. Это довольно удивительно, если вы спросите меня - не нужно тянуть, не нужно запрашивать базу данных. Действия могут происходить при создании, обновлении или удалении элементов в базе данных.
Другими словами, вы можете интегрировать Amazon DynamoDB с AWS Lambda, чтобы создавать триггеры - фрагменты кода, которые автоматически реагируют на события в DynamoDB Streams. С помощью триггеров вы можете создавать приложения, которые реагируют на изменения данных в таблицах DynamoDB.
Теперь вам, наверное, интересно, что я хочу с этим делать ...
Хороший вопрос, Винсент! Ответ прост - я хочу провести анализ настроений в поле session_comment ; Я хочу знать, является ли комментарий ПОЛОЖИТЕЛЬНЫМ, ОТРИЦАТЕЛЬНЫМ или НЕЙТРАЛЬНЫМ. И на AWS есть простой способ сделать это - поздороваться с Amazon Comprehend.
Голос покупателей: О чем ты ???
Amazon Comprehend - это сервис обработки естественного языка (NLP), который использует машинное обучение для поиска идей и взаимосвязей в тексте. Он может определять язык текста, извлекать ключевые фразы, места, людей, бренды или события. Сервис также может понять, насколько текст положительный или отрицательный. Другими словами - много крутого!
Один из аспектов Comprehend, который мне очень интересно изучить, - это API обнаружения настроений.
Да, это ЭТО просто! Одна строка кода - и вы получите ультрасовременный анализ тональности вашего приложения.
Интересный факт: служба Comprehend постоянно учится и совершенствуется на основе различных источников информации, включая описания продуктов Amazon.com и отзывы потребителей - один из крупнейших естественных языков. наборы данных в мире - чтобы идти в ногу с эволюцией языка.
Собери все вместе
Теперь давайте объединим все вместе и интегрируем потоки DynamoDB с AWS Lambda и Amazon Comprehend.
Во-первых, давайте посмотрим на поток DynamoDB и объекты, которые в нем отправляются. Ниже приведен объект потока, отправляемый после запроса POST.
Вот транслируемый объект полностью. По сути, это список записей.
Самая интересная часть - это поле под названием eventName, используемое здесь как INSERT
в DynamoDB. Есть несколько типов модификации данных, которые могут быть выполнены в таблице DynamoDB:
INSERT
- в таблицу добавлен новый элемент.MODIFY
- один или несколько атрибутов существующего элемента были изменены.REMOVE
- элемент удален из таблицы
Ниже показано, как функция Lambda подключается к потоку DynamoDB и вызывает Amazon Comprehend для анализа поля session_comment и сохранения его обратно в DynamoDB. Вы заметите, почему важно eventName.
Примечание. Не бойтесь функций remove_key () или replace_decimals (). Они используются, чтобы немного очистить объект и в дальнейшем облегчить мне жизнь :)
Примечание 2. Забавный синтаксис функции table.update_item () объясняется здесь.
Шаблон для развертывания Lambda, запускаемого из DynamoDB с использованием бессерверной среды, следующий:
Обратите внимание на тип functions: streamFunction, который используется в шаблоне, чтобы отличать его от других типов, и на поле events: stream. который содержит имя ресурса Amazon (ARN) потока DynamoDB.
Чтобы получить ARN, используйте следующую команду:
Чтобы развернуть, то же самое, что и раньше:
Пришло время протестировать недавно расширенный API.
Вуаля !! Вы просто, с минимальными усилиями, интегрировали в свое приложение анализ тональности. Браво :-)
но .. почему .. ты .. делаешь .. это ???
Вам может быть интересно, почему я решил использовать этот управляемый событиями шаблон преобразования потока в лямбда для дополнения данных вместо того, чтобы вызывать Amazon Comprehend непосредственно из клиента перед сохранением данных в DynamoDB. Один звонок вместо двух?
Я называю это эффективностью :-)
Но это не все! Используя этот подход, нам не нужно предоставлять клиенту дополнительные разрешения для прямого вызова Comprehend - ограничивая нашу политику безопасности и доступа до минимума.
На этом пока все, ребята! Надеюсь, это было информативным. В следующей статье этой серии мы перейдем к вопросам отказоустойчивости и хаос-инженерии - следите за обновлениями!
-"Адриан"