Могу ли я вызвать функцию Lambda или событие SNS в ответ на мутацию AppSync GraphQL? - PullRequest
0 голосов
/ 01 июля 2019

Подписки AWS AppSync / GraphQL в сочетании с AWS Amplify звучат потрясающе, поскольку из коробки вы можете подписать всех своих клиентов на высокоуровневые доменные события, указанные в вашей схеме.

Хотя кажется естественным, что должен быть способ транслировать все эти события в службу, такую ​​как лямбда или SNS, для внутреннего реагирования на эти события. Может быть, вы хотите регистрировать события, переиндексировать или объединять обновленные данные, или отправить электронное письмо или push-уведомление пользователю. Как и DynamoDB Streams, вы можете запускать лямбда-обновления при обновлении таблицы. Кто-нибудь знает хороший способ для достижения этой цели?

Кажется, что нет источника триггера AppSync для лямбды, но, кажется, может быть несколько способов сделать это иначе:

  1. Создайте длительный процесс / сервис в ECS / Fargate, который подписывается на каждую мутацию, которую он хочет транслировать в SNS / Lambda. Не идеально, так как вам придется управлять и масштабировать этот процесс самостоятельно.

  2. Использование потоков DynamoDB в качестве лямбда-триггера. Однако событие изменения таблицы DynamoDB является более низким уровнем, чем событие мутации GraphQL, и это предполагает, что единственным источником данных является DynamoDB, тогда как AppSync / GraphQL может подключаться ко многим другим источникам данных.

  3. Создайте лямбда-резольверы для каждой мутации, которая также транслирует событие в SNS / Lambda. Для простой трансляции событий SNS, возможно, есть умный способ использовать преобразователи конвейера, чтобы прикреплять повторно используемый преобразователь к каждой мутации ...

Я не уверен, как инфраструктура Amplify питает их преобразователь @searchable, будь то # 2 или # 3, или что-то еще в целом, но кажется, что это в том же русле (повторная индексация данных в Elasticsearch в ответ для обновления). Я помню, что слышал, что вы можете написать свои собственные преобразователи ... возможно, можно написать их собственный преобразователь @broadcasted, который также транслирует все события мутации в SNS S

Я удивлен, что не видел много дискуссий по этой теме. Если у кого-то есть какие-нибудь хорошие идеи или я думаю об этом неправильно, дайте мне знать.

1 Ответ

1 голос
/ 03 июля 2019

Похоже, вы пытаетесь запустить лямбда-функции на основе входящих мутаций.

Как вы упомянули в варианте 3 - лямбда-резолверы могут достичь этой функциональности, но если вам нужно вызвать обычную лямбду, которая публикуется в SNS в качестве шага в выполнении - тогда вы можете использовать конвейерные резолверы. Где «общая» лямбда-функция будет источником данных для шага в вашем конвейере, а затем будет иметь обычный преобразователь, который вы бы использовали для Dynamo / ES / Aurora Serverless.

Документы: https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html

...