2017-01-03 96 views
0

调用我的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函数?

回答

4

SQS不是数据库,你不能“查询”它。如果您需要通过某个键检索邮件,则最好使用键值存储。 ElastiCache Redis和DynamoDB都适合这种类型的工作。

+0

好吧,但有可能只获得具有特定ID的消息? – xergiopd

+0

@xergiopd:我在ReceiveMessage上看不到任何可以指定messageId的属性。正如Sergey指出的那样 - 通过ID来提取特定的SQS消息并不是真正的SQS设计用例,因为它是排队系统。 –

+0

您可以在S3中使用预定义密钥存储消息,然后通过该密钥将消息拉回。您也可以使用DynamoDB或RDS,它们都非常适合您要实现的目标。 –