Могу ли я активировать функцию Lambda или событие SNS в ответ на мутацию AppSync GraphQL?

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

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

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

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

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

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

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

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

Вы смотрели на преобразователи Pipeline? docs.aws.amazon.com/appsync/latest/devguide/…

J. Hesters 02.07.2019 19:30
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
В этой статье мы рассмотрим, как включить доступ Java Lambda к экземпляру AWS RDS MySQL.
1
1
1 141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Спасибо за указатель @Ashwin! Я думаю, что меня немного смутил язык, окружающий "типы" и "поля". Я постоянно слышал о преобразователях конвейера в контексте разрешения «полей», что, как я думал, означает разрешение полей типов только во время запросов. В документации, на которую вы ссылаетесь, есть хороший пример, показывающий, что мутация под названием signUp также является «полем» в «типе» мутации. На самом деле все является просто типом или полем. Таким образом, полностью поддерживается настройка повторно используемого преобразователя конвейера, который транслирует событие мутации в SNS или даже напрямую вызывает лямбду.

Roman Scher 03.07.2019 19:32

Другие вопросы по теме