2017-01-03 3 views
0

私のApiゲートウェイのURLを呼び出すと、SQSで渡されたメッセージを挿入してキュー内のメッセージのIDを返すラムダ関数がトリガされます。 これで、API Gatewayの別のリソースを作成し、別のLambda関数を使用してキュー内のすべてのメッセージを出力しました。これは関数です:AWSラムダ関数クエリ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) 

どのように関数を変更して、指定したIDのメッセージのみを取得できますか? この パラメータを受信し、それをラムダ関数に渡すようにApiゲートウェイを設定するにはどうすればよいですか?

答えて

4

SQSはデータベースではありません。あなたはそれを「照会」できません。あるキーでメッセージを取得する必要がある場合は、キーと値のストレージを使用する方がよいでしょう。 ElastiCache RedisとDynamoDBはどちらもこの種の作業に最適です。

+0

okですが、特定のIDのメッセージのみを取得することは可能ですか? – xergiopd

+0

@xergiopd:ReceiveMessageにはmessageIdを指定できる属性がありません。 http://geocities.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html Sergeyが指摘したように、特定のSQSメッセージをIDで取得することは、SQSがそのように設計されたユースケースではありません待ち行列システム。 –

+0

S3にあらかじめ定義されたキーでメッセージを保存し、代わりにそのキーでメッセージを取り戻すことができます。また、達成しようとしているものに適したDynamoDBまたはRDSを使用することもできます。 –