我有一个在端口上监听消息的NodeJS+Express进程(进程1)的EC2实例。每次该进程接收到一条消息,它都会将其发送到SQS队列。然后我在同一台机器上拥有另一个进程使用长轮询方式读取队列(进程2)。当它在队列中找到一条消息时,它会将数据插入到位于RDS实例上的MariaDB数据库中。
(仅为澄清,消息由用户生成,他们发送包含任意信息的数据块到进程1所在的端点)
现在我想将读取SQS的进程(进程2)放入Lambda函数中,以便写入队列和读取队列的进程完全独立。问题是我不知道这是否可能。
我知道Lambda函数是响应事件而调用的,目前支持的事件类型有S3、SNS、SES、DynamoDB、Kinesis、Cognito、CloudWatch和Cloudformation,但不支持SQS。
我想使用SNS通知来调用Lambda函数,以便每次将消息推送到队列时,都会触发SNS通知并调用Lambda函数,但是在尝试一番后,我意识到无法从SQS创建SNS通知,只能将SNS通知写入队列。
现在我有点困惑,因为我不知道该如何继续。由于AWS服务的当前限制,我感觉无法创建此基础架构。是否有其他方法可以实现我的目标,或者我已经走到了死胡同?
仅为了扩展我的问题,这个github存储库展示了如何从Lambda函数中读取SQS队列,但是lambda函数仅在从命令行触发时起作用:
https://github.com/robinjmurphy/sqs-to-lambda
在自述文件中,作者提到了以下内容:更新:Lambda现在支持SNS通知作为事件源,这使得对于SNS通知来说,这个hack变得完全不必要。如果你喜欢使用Lambda函数来处理SQS队列上的作业,你可能仍然会发现它有用。
但我认为这并不能解决我的问题,SNS通知可以调用Lambda函数,但我不知道如何在接收到SQS队列中的消息时创建通知。
谢谢