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