AWS Lambda函数查询SQS MessageId和ApiGateway
问题描述:
调用我的Api网关的url将触发一个Lambda函数,该函数插入SQS中传递的消息并返回队列中消息的ID。 现在我创建了另一个API网关资源,并通过另一个Lambda函数打印队列中的所有消息。这是功能:AWS Lambda函数查询SQS MessageId和ApiGateway
import boto3
import json
def lambda_handler(event, context):
sqs = boto3.resource('sqs')
queue = sqs.get_queue_by_name(QueueName='<queue_name>')
messages = set()
for m in range(0, 9):
msg_list = queue.receive_messages()
for msg in msg_list:
messages.add(msg.body)
return list(messages)
我该如何更改函数以获取仅带有指定标识的消息? 我怎样才能配置Api网关接收这个 参数并将其传递给Lambda函数?
答
SQS不是数据库,你不能“查询”它。如果您需要通过某个键检索邮件,则最好使用键值存储。 ElastiCache Redis和DynamoDB都适合这种类型的工作。
好吧,但有可能只获得具有特定ID的消息? – xergiopd
@xergiopd:我在ReceiveMessage上看不到任何可以指定messageId的属性。正如Sergey指出的那样 - 通过ID来提取特定的SQS消息并不是真正的SQS设计用例,因为它是排队系统。 –
您可以在S3中使用预定义密钥存储消息,然后通过该密钥将消息拉回。您也可以使用DynamoDB或RDS,它们都非常适合您要实现的目标。 –