我有包含时间序列样本数据的JSON文件被送入S3 . 我有一个React客户端,其组件需要显示最近x分钟的样本数据的最新统计平均值 .
理想情况下,更新将由S3上载触发,而不是浏览器需要轮询Web服务 . Websockets和Server Sent Events不是一个选项 . 根据这些要求,我是否可以实际使用AWS Appsync的订阅来提供实时数据?
如果需要,我不反对使用中间数据库 . 我假设查询数据的时间范围以计算平均值的步骤是有益的,我假设我将使用S3触发Lambda并使用它将S3对象数据拉入数据库 .
亚马逊在2月宣布增加Local Resolvers
例如,Lambda函数可以调用GraphQL突变到AWS AppSync以响应发生的某些事件,例如处理上传到S3存储桶的数据
这听起来很有希望,除了我找不到任何涉及Local Resolvers和Lambda / S3的例子 . 我能找到的唯一文件是here .
EDIT:
在对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”并进行平均计算 . 好像方向好吗?
1 回答
听起来很可能 - 你要做的是有一个Lambda函数,它对AppSync执行GraphQL变异,使用
@aws_subscribe()
指令通知该客户订阅的客户端 . 然后要触发Lambda函数,您将使用S3事件源来调用它 . 这是一个教程:https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html