こんにちは。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について記載しました。
使い方次第で様々な制約を回避できます。
参考になれば幸いです!