Как подписаться непосредственно на источник данных AWS AppSync?

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

Как я могу подписаться на изменения источника данных напрямую?


person Kemal Ahmed    schedule 02.08.2018    source источник


Ответы (1)


Ты прав. В настоящее время подписки AppSync активируются только из GraphQL Mutations. Если в DynamoDB внесены изменения из источника, отличного от AppSync, подписки не будут активированы.

Если вы хотите отслеживать все изменения, вносимые в таблицу DynamoDB, и публиковать их с помощью AppSync, вы можете сделать следующее:

1) Настройте поток DynamoDB для сбора изменений и передачи изменений в AWS Lambda.

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.html

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

https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-local-resolvers.html

3) Заставьте функцию DynamoDB Stream Lambda (настройка на шаге 1) вызывать мутацию AWS AppSync (настройка на шаге 2).

Это позволит публиковать ВСЕ изменения, внесенные в таблицу DynamoDB, для подписчиков AppSync, независимо от того, откуда это изменение.

person Michael Willingham    schedule 02.08.2018
comment
Как разрешить Lambda вызывать экземпляр AppSync, если для этого требуется вход в систему Cognito? - person Kemal Ahmed; 10.08.2018
comment
Зависит от типа авторизации. Для ключа API просто добавьте заголовок. То же самое для пользовательских пулов OIDC и Cognito. Если вы используете AWS_IAM, вам предстоит еще поработать, поскольку вам необходимо подписать соединение с помощью AWS AppSync SDK. - person Adrian Hall; 10.08.2018
comment
@AdrianHall, какой заголовок я бы добавил для подключения к пулам Cognito? - person Kemal Ahmed; 23.08.2018
comment
Добавьте заголовок авторизации с токеном JWT на предъявителя - person Adrian Hall; 25.08.2018
comment
@AdrianHall разве вам не требуется имя пользователя и пароль для создания этого токена? - person Kemal Ahmed; 28.08.2018
comment
Да - вы можете либо использовать переданный заголовок авторизации, который доступен в Lambda, либо просто войти в пул Cognito с внутренним именем пользователя / паролем (стандартный материал OIDC) для создания JWT. - person Adrian Hall; 31.08.2018
comment
На шаге 3 из лямбда вызовите мутацию AWS AppSync? Как мы это делаем? В других комментариях предлагается организовать конечную точку, аутентификацию, запрос и нажать на нее, как кто-то извне? В этом случае можно также описать это решение как «Создать мутацию», которая вызывает лямбда-выражение, которое снова передает входящие данные. Отправить ему мутацию appsync из потока.? - person John Mee; 31.07.2020