1

我有包含时间序列样本数据的 JSON 文件被输入到 S3 中。我有一个带有组件的 React 客户端,该组件需要显示最近 x 分钟的样本数据的最新统计平均值。

理想情况下,更新将由 S3 上传触发,而不是浏览器需要轮询 Web 服务。Websockets 和服务器发送事件不是一个选项。考虑到这些要求,我是否可以实际使用 AWS Appsync 的订阅来提供实时数据?

如果需要,我不反对使用中间数据库。我认为查询数据以计算平均值的时间范围的步骤将是有益的,并且我假设我将使用 S3 触发 Lambda 并使用它将 S3 对象数据拉入数据库。

亚马逊在 2 月宣布增加本地解析器

例如,Lambda 函数可以调用 AWS AppSync 的 GraphQL 突变以响应发生的某些事件,例如处理上传到 S3 存储桶的数据

这听起来很有希望,但我找不到任何涉及本地解析器和 Lambda/S3 的示例。我能找到的唯一文档是here

编辑:

在阅读了 GraphQL 之后,我了解了 API,看来我应该能够在 lambda 中使用 HTTP 客户端来进行突变。用 curl 试过这个,它起作用了:

curl -X POST \
   https://censored.appsync-api.us-east-1.amazonaws.com/graphql \
   -H 'Content-Type: application/json' \
   -H 'x-api-key: censored' \
   -d '{"query": "mutation CreateEvent {createEvent(name: \"testName\", when: \"Now\", where: \"here\", description: \"testDescription\") {name when where description}}"}'

有了这个,我想我现在可以通过 Lambda 调用“addIntervalData”突变,将每个 S3 对象的内容添加到数据库中,并使用 lambda 解析器来实现“getAverage”并进行平均计算。似乎是个好方向?

4

1 回答 1

0

听起来可能 - 您要做的是拥有一个 Lambda 函数,该函数对 AppSync 进行 GraphQL 突变,该突变使用@aws_subscribe()指令通知订阅的客户。然后,要触发该 Lambda 函数,您将使用 S3 事件源来调用它。这是一个教程:https ://docs.aws.amazon.com/lambda/latest/dg/with-s3.html

于 2018-04-15T18:36:21.783 回答