こんにちは。Renです。
SQS+Lambdaの使いどころ、使い方について簡単にご紹介します。

Lambdaの制約

  • 1回の最大処理時間15分
  • レスポンスサイズが最大6MB
  • 同時実行数が最大1000(申請により上限緩和可能)

使いどころ

  • 処理件数が多く、15分以上かかってしまうとき
  • APIコールをする際に、1分300回までのような上限を回避するとき

Lambda→SQSへの送信

以下コードでLambda関数からSQSキューへメッセージを送信します。

<前提条件>

  • SQSキューを作成済みであること
  • Lambda実行ロールに必要な権限が付与されていること
 import boto3
 import os
 import json
  
 # SQSクライアントの作成
 sqs_client = boto3.client(‘sqs’)
  
 # 環境変数に設定したSQSのURLを取得
 sqs_url = os.environ[‘SQS_URL’]
  
 # 送信するメッセージを設定
 message = json.dumps({“code”: 12345})
  
 # メッセージを送信
 Response = sqs_client.send_message(
             QueueUrl = sqs_url,
             MessageBody = message
 ) 

SQS→Lambda メッセージの受信

SQSキューがメッセージを受信したことをトリガーとしてLambdaを起動する場合には、Lambdaハンドラのevent内に情報が入ってきます。
以下のようなコードでevent[’Records’]からデータを取得します。

 import boto3
 import os
 import json
  
 for record in event['Records']:
             message = json.loads(record[‘body’]) 

ポイント

  • SQSのスタンダードキューを使用する場合には、何度呼び出されても大丈夫なように冪等性のあるコードを記載する必要がある
  • 直列起動の場合は、Lambdaの同時実行数を1に設定する必要がある

まとめ

SQS→Lambda→SQSについて記載しました。
使い方次第で様々な制約を回避できます。
参考になれば幸いです!