Как предотвратить перезапись / дублирование в DynamoDB от запуска лямбда - PullRequest
1 голос
/ 10 января 2020

У меня есть DynamoDB, который получает данные, записанные в него из java приложения

mapper.save(row, DynamoDBMapperConfig.builder().withSaveBehavior(SaveBehavior.CLOBBER).build());

Я хочу, чтобы лямбда-триггер отключал новые элементы в DDB, чтобы их ключи могли быть помещены на SNS. Однако, если элемент в DynamoDB перезаписывается (IE мы получили повторяющиеся данные), мы НЕ хотим что-либо делать с ним.

Как с этим справиться? Я контролирую как лямбду, так и код, записывающий в DDB, но не источник данных.

Ответы [ 2 ]

3 голосов
/ 10 января 2020

Не думаю, что мы можем предотвратить срабатывание лямбды при перезаписи элемента в DynamoDB. Но как только Lambda запущена, мы можем определить, является ли это новая запись или существующая запись.

Входом для функции Lambda будет DynamoDBStreamEvent, который содержит атрибут OldImage. Если это присутствует, это означает, что это существующая запись, которая была изменена. В этом случае мы можем просто вернуться из Lambda без какой-либо обработки.

Кроме того, событие содержит весь моментальный снимок до и после вставки в атрибуты OldImage и NewImage. Таким образом, мы также можем проверить, изменилось ли какое-либо другое значение атрибута или нет, чтобы решить, является ли это перезаписью.

1 голос
/ 11 января 2020

Вам нужно иметь IF, CASE или что-то, что смотрит на имя события потоковой записи, и если это INSERT, что означает новый, если я правильно помню, то он запустит ваш код. Если это что-то вроде MODIFY, то не будет. В документации DynamoDB есть пример .

...