Подписки AWS AppSync / GraphQL в сочетании с AWS Amplify звучат потрясающе, поскольку из коробки вы можете подписать всех своих клиентов на высокоуровневые доменные события, указанные в вашей схеме.
Хотя кажется естественным, что должен быть способ транслировать все эти события в службу, такую как лямбда или SNS, для внутреннего реагирования на эти события. Может быть, вы хотите регистрировать события, переиндексировать или объединять обновленные данные, или отправить электронное письмо или push-уведомление пользователю. Как и DynamoDB Streams, вы можете запускать лямбда-обновления при обновлении таблицы. Кто-нибудь знает хороший способ для достижения этой цели?
Кажется, что нет источника триггера AppSync для лямбды, но, кажется, может быть несколько способов сделать это иначе:
Создайте длительный процесс / сервис в ECS / Fargate, который подписывается на каждую мутацию, которую он хочет транслировать в SNS / Lambda. Не идеально, так как вам придется управлять и масштабировать этот процесс самостоятельно.
Использование потоков DynamoDB в качестве лямбда-триггера. Однако событие изменения таблицы DynamoDB является более низким уровнем, чем событие мутации GraphQL, и это предполагает, что единственным источником данных является DynamoDB, тогда как AppSync / GraphQL может подключаться ко многим другим источникам данных.
Создайте лямбда-резольверы для каждой мутации, которая также транслирует событие в SNS / Lambda. Для простой трансляции событий SNS, возможно, есть умный способ использовать преобразователи конвейера, чтобы прикреплять повторно используемый преобразователь к каждой мутации ...
Я не уверен, как инфраструктура Amplify питает их преобразователь @searchable, будь то # 2 или # 3, или что-то еще в целом, но кажется, что это в том же русле (повторная индексация данных в Elasticsearch в ответ для обновления). Я помню, что слышал, что вы можете написать свои собственные преобразователи ... возможно, можно написать их собственный преобразователь @broadcasted, который также транслирует все события мутации в SNS S
Я удивлен, что не видел много дискуссий по этой теме. Если у кого-то есть какие-нибудь хорошие идеи или я думаю об этом неправильно, дайте мне знать.