lambda1->sqs->lambda2と処理をしているのですが、最初のlambda1を実行してからlambda2が完了するまで数時間かかってしまうのですが、原因がわからずどのようにして速度を改善すればいいのかわからないです。
また、lambda1は五分ごとに20~50ほど実行され、queが溜まっていきます。
各lambdaとも実行時間は2分かからないぐらいです。
cloudwatch logsで確認したところlambda1からsqsまではすぐに呼び出され、sqsからlambdaへが時間がかかっているようです、、、
また、lambda1を実行すると利用可能なメッセージには数字は増えず、処理中のメッセージに溜まっていきます。
sqsからlambda2を実行する際に同時実行数の確認をしたのですが、デフォルトの状態でも、個別に設定しても変わりませんでした。
また、デッドレターキューに関して特に設定などしていないんですが、設定したら速度の改善などはあるのでしょうか。。?
sqsへの理解が足りてないことが全ての原因であると理解はしています。。。
まとまってない内容ですが、教えていただけると幸いです。
sqs設定について
最大メッセージサイズ256kb
メッセージ保持期間4日
デフォルトの可視性タイムアウト1時間
配信遅延〇秒
メッセージ受信待機時間〇秒
コンテンツに基づく重複排除 -
高スループット FIFO -
重複排除スコープ -
FIFO スループット制限 -
lambda2設定について
sqsトリガーに関して
バッチウィンドウ: 200
バッチサイズ: 60
同時実行数
修飾子 1
タイプ バージョン
プロビジョニングされた同時実行 100
ステータス 準備完了
詳細 -
sqs送信時のコード
message = { "service" : service, "id" : id } res = send_sqs_message(message) def send_sqs_message(send_message): url = "https://sqs.ap-northeast-1.amazonaws.com/*******/ManagementRequest" obj = json.dumps(send_message) print("url") print(obj) try: print('===============') print('send_sqs_message') response = sqs.send_message( MessageBody = obj, QueueUrl = url, DelaySeconds = 0 ) print('===============') except Exception as e: print('=====Error=====') print('send_sqs_message') print('ERROR:' + str(e)) print('===============') return None return response
sqs受け取り時のコード
def lambda_handler(event, context): print('event') print(event) for record in event['Records']: # 引数;event内の'Records'を配列要素分Loop curBody = json.loads(record['body']) # 'body'内のハッシュ要素をjson形式に変更(※) service = curBody["service"] table_id = curBody["id"]
あなたの回答
tips
プレビュー