Предотвратите поток DynamoDB от запуска лямбда-функции - PullRequest
1 голос
/ 01 ноября 2019

Есть ли способ предотвратить лямбда-поток при запуске DynamoDB при каждом изменении DynamoDB?

Поток DynamoDB настроен для запуска лямбда-функции. Лямбда находится в конце пошаговой функции, а таблица DynamoDB обновляется в нескольких местах по всей пошаговой функции. Но это не те обновления, которые нужны лямбде из потока. Таким образом, он преждевременно запускает лямбду, прежде чем лямбда должна его вызвать, и заставляет лямбду срабатывать несколько раз в течение всего действия функции шага. Это вызывает всевозможные проблемы.

Одно очень конкретное изменение в таблице DynamoDB - это то, что необходимо для запуска лямбда-выражения. Это изменение происходит не от пошаговой функции, а от пользовательского интерфейса через GraphQL. Лямбда должна иметь возможность запускаться как в конце функции шага, так и всякий раз, когда это изменение происходит в пользовательском интерфейсе.

По сути, есть два сценария, когда лямбда должна запускаться: 1) в конце функции шага и 2) когда таблица DynamoDB обновляется в пользовательском интерфейсе, минуя функцию шага.

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

Эти числа не точны, но, скажем, функция шага будет выполняться 10 раз подряд, а затемон обновит DynamoDB 3 раза. Это в 30 раз больше лямбды, прежде чем функция шага когда-либо запускает лямбду, как это и должно быть. Есть ли способ предотвратить эти лямбда-вызовы?

1 Ответ

3 голосов
/ 01 ноября 2019

Нет, если вы присоедините лямбда-функцию к триггеру DDB, она всегда будет выполняться при обновлении DDB. Вы должны изменить свою архитектуру. Вы можете немедленно прекратить работу, если не хотите, чтобы он работал (что вы делаете сейчас), но вы платите за запросы вызова.

В качестве альтернативы вы можете изменить код обновления DDB (сценарий 2). Замените его лямбда-функцией, которая обновляет код DDB, а затем вызывает нужную лямбда-функцию. После этого вы можете безопасно удалить поток, поскольку вы больше не используете его.

...