AWS AppSync:如何从DynamoDB监听更改(不按突变)

时间:2019-06-19 17:30:48

标签: node.js amazon-dynamodb aws-amplify aws-appsync

我从Amplify Cli中为我的角度项目创建AppSync API。

该网站可以订阅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 :(得分:0)

AppSync只能通过订阅传递通过突变传递给它的消息。如果对DynamoDB表进行了更改,确保消息始终通过订阅传递的一种方法是将Kinesis流添加到表中,只要对表进行更改,它就会发出事件。然后,您可以让Lambda函数订阅此Kinesis流,并对AppSync进行Mutation调用,以将修改后的数据通过“订阅”发送到连接的客户端。参见图:

Diagram of Architecture

答案 1 :(得分:0)

您可以在特定表上启用DynamoDB流,然后将触发器设置为所需的任何内容(lambda,sns等):https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html

这样,无论表如何更新,订阅到其流的任何内容都将知道它。