Здравтвуйте!
Работаю с AWS labmda и DynamoDB. Не могу решить порблему с кэшированием данных в БД. Дело в том, что у меня приходит с сайта заявки и эти заявки потом идут в CRM. Но каким-то образом получается так, что в Базе данных уже заявка записывается, а в CRM она еще не появляется и уже больше пары часов. А надо чтобы в течение 5 минут уже добавлялась в CRM. И вот нашел функцию DAX DynamoDB, но как ее отключить я понятия не имею.
Кто-нибудь сталкивался с такой проблемой?
Иван Шумов
@inoise Куратор тега Amazon Web Services
Сдается мне проблема не в кэше. Нарисуйте, пожалуйста, схему прохождения заявки через сервисы, и проблемное место. Dax кэширует только уже случившиеся факты
Иван Шумов, тут кажется вы правы, потому что я провел тестирвоние локально без использования AWS-lambda и запросы идут верно, но в лямбда почему-то не видит новых записей. Но в лямбде я нигде не включал кэширование. почему же оно кэшируется? И ведь уже больше 3-ех часов прошло, а все равно не видит. Странно!
Написано
Иван Шумов
@inoise Куратор тега Amazon Web Services
vseriousv, Схему в студию. Сейчас это пальцем в небо
Иван Шумов
@inoise Куратор тега Amazon Web Services
Ну, значит если нет ошибок в лямбде и в cloudwatch тишина то смотрим прикреплена ли она к Dynamo stream, хватает ли ей прав в IAM и те ли она эвенты обрабатывает. На крайний случай стоит проверить конфигурацию самого стрима
Иван Шумов, У меня Lambda работает работает через cloudwatch Events каждую минут запускает функцию. Там может быть где-то роблема?
Написано
Иван Шумов
@inoise Куратор тега Amazon Web Services
vseriousv, Там может быть тонна проблем. Начиная от того что оно не правильно сконфигурировано и заканчивая тем что это медленно. Лучше цеплять напрямую к стриму и сразу получать результат без задержек. К тому же лямбда может работать только ограниченное время и если там есть асинхронные обработки то она может умереть до окончания. В общем подводных камней тонна. Советую просто на каждую строку вывести в лог и посмотреть где тупит. Если она вообще не запускается то очевидно надо настраивать
Иван Шумов, Спасибо за наводку. подключил я триггер DynampDB. И по идеи, как я понял, при добавлении записи в в базу данных, должен срабатывать этот тригер и запускать lambda функцию. В самой функции я использую
var dynamoDb = new AWS.DynamoDB.DocumentClient();
dynamoDb.scan({TableName: process.env.TableName})
.
И проблема в том, что функция срабатывает всего один раз и тишина, вообще не реагируя на добавение новых записей в таблицу. Возможно есть какая-то функция работы потоком данного триггера (если я правильно понимаю работу данного триггера)?
Написано
Иван Шумов
@inoise Куратор тега Amazon Web Services
vseriousv, да, в документации много полезной информации на этот счет. И соединяться с DynamoDB вообще не нужно - тебе из стрима сразу событие с данными должно приехать (как настроишь)
Иван Шумов, Спасибо еще раз, все получилось сделать через потоки DynamoDB. Но у меня есть еще одна функция, которая из стороннего JSON заносит данные в DynamoDB. Дело в том, что когда я удаляю занесенный объект в DB, второй раз он почему-то уже не заносится. Я все таки уверен, что дело тут в кэшировании. Подскажите в каком направлении копать? Это дело в CloadWatch Event или в самой DynamoDB?
Написано
Иван Шумов
@inoise Куратор тега Amazon Web Services
Кирилл Гаврилов, занимайся отладкой, смотри ответы от DynamoDB. Кэш работает только на чтение