2017-01-03 150 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,它們都非常適合您要實現的目標。 –