こちらでPythonのLambdaファンクションとしてSQSにエンキューするコードを
"API Gateway → Lambda → SQS"でJSONデータをエンキューする
こちらでデキュー(Recieve & Delete)するコードを書きました。
SQSのメッセージをLambdaで5分おきに処理する(Scheduled Event)
その時は、下記のようにClientを使っていたのですが、
client = boto3.client('sqs')
次のService Resourceというものを使う方法もあり
sqs = boto3.resource('sqs')
こちらの方が筋が良さそうだったので、上述のLambdaファンクションを
Service Resourceを使った形に書き換えてみました。
SQSにエンキューするLambdaファンクション
import json port boto3 iimport logging logger = logging.getLogger() logger.setLevel(logging.INFO) queueName = 'test' def lambda_handler(event, context): try: logger.info(event) response = boto3.resource('sqs').get_queue_by_name QueueName = queueName ).send_message( MessageBody = json.dumps(event) ) logger.info(response) return response except Exception as e: logger.error(e) raise e
SQSにデキューするLambdaファンクション
import boto3 import logging logger = logging.getLogger() logger.setLevel(logging.INFO) queueName = 'test' maxNumberOfMessages = 10 def lambda_handler(event, context): try: logger.info(event) queue = boto3.resource('sqs').get_queue_by_name( QueueName = queueName ) messages = queue.receive_messages( MaxNumberOfMessages = maxNumberOfMessages ) entries = [] for message in messages: entries.append({ "Id": message.message_id, "ReceiptHandle": message.receipt_handle }) response = {} if len(entries) != 0: response = queue.delete_messages( Entries = entries ) logger.info(response) return response except Exception as e: logger.error(e) raise e
以前よりもスッキリしたんじゃないでしょうか?