AWS AppSync: как прослушать изменения из DynamoDB (не мутацией) - PullRequest
1 голос
/ 19 июня 2019

Я создаю AppSync API из Amplify Cli для своего углового проекта.

Сайт может подписаться на OnChangeListner, где DynamoDB обновляется путем мутации.Это работает.

async ngOnInit() {

   this.api.OnUpdateTableListener.subscribe({
      next: resp => {
        console.log("update !!!");
        console.log("update: " + JSON.stringify(resp));
        let update = resp.value.data.onUpdateTable;
        this.items = this.items.map(function(a) {
          return a.id === update.id ? update : a;
        });

      }
    });
}


async update(selectedItem) {
    const update = {
      id: selectedItem.id,
      status: !selectedItem.status
    };
    await this.api.UpdateTable(update);
  }

Однако я заметил, что если я обновлю DynamoDB вручную, подписка не будет работать вообще.

Все предложения о том, как обновить подписки DynamoDB (не с помощью мутаций) и AppSync, по-прежнему работают.

Ответы [ 2 ]

0 голосов
/ 19 июля 2019

Вы можете включить потоки DynamoDB для конкретной таблицы, а затем настроить триггеры на все, что захотите (лямбда, sns и т. Д.): https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html

Таким образом, независимо от того, как обновляется таблица, все, чтоподписавшийся на его поток узнает об этом.

0 голосов
/ 21 июня 2019

AppSync может доставлять сообщения только по подписке, которые передаются ему с помощью мутации. Один из способов обеспечения того, чтобы сообщения всегда доставлялись по подписке, если в таблицу DynamoDB вносятся изменения, - это добавление в таблицу потока Kinesis, который будет генерировать события каждый раз, когда в таблицу вносятся изменения. Затем вы можете сделать так, чтобы функция Lambda подписывалась на этот поток Kinesis и выполняла вызов Mutation в AppSync для отправки измененных данных подключенным клиентам через подписку. Смотрите схему:

Diagram of Architecture

...