質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon SQS

Amazon SQS(Amazon Simple Queue Service)は、AWSが提供している分散型メッセージキューイングサービスです。APIを用いてアクセスすることが可能。これによって、アプリケーションのメイン処理と非同期に動いてほしい処理を分離することができます。

Q&A

0回答

2833閲覧

sqsでlambdaを呼び出しているのですが、あまりにも遅い

pro_hro

総合スコア1

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon SQS

Amazon SQS(Amazon Simple Queue Service)は、AWSが提供している分散型メッセージキューイングサービスです。APIを用いてアクセスすることが可能。これによって、アプリケーションのメイン処理と非同期に動いてほしい処理を分離することができます。

0グッド

1クリップ

投稿2021/10/24 04:58

編集2021/10/24 08:12

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"]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

175

2021/10/24 05:41

>cloudwatch logsで確認したところlambda1からsqsまではすぐに呼び出され、sqsからlambdaへが時間がかかっているようです、、、 >また、lambda1を実行すると利用可能なメッセージには数字は増えず、処理中のメッセージに溜まっていきます。 この辺りのエビデンスとなるログやスクショの記載お願いします。
pro_hro

2021/10/24 06:28

>cloudwatch logsで確認したところlambda1からsqsまではすぐに呼び出され、sqsからlambdaへが時間がかかっているようです、、、 lambda1を実行するとsqsでの処理中のメッセージの数が増えるためそう判断しました。また、lambdaでsqsに送信後lambdaの処理が終わっているのもそう判断した要因の1つです >また、lambda1を実行すると利用可能なメッセージには数字は増えず、処理中のメッセージに溜まっていきます。 質問を修正し、添付します。 ご確認よろしくお願いします。
175

2021/10/24 06:38

キューの配信遅延時間とメッセージ待機時間の値を確認してみてください
175

2021/10/24 06:42

あれ? 「あまりにも遅い」とのことですが、ある程度時間が経つと利用可能なメッセージの数は増えていくのでしょうか?
pro_hro

2021/10/24 06:43

そこらへんの設定も付け加えるべきでしたね、、、 追記します。 よろしくお願いします。
pro_hro

2021/10/24 06:47

利用可能なメッセージの数に関してなのですが、こちらの数字が0以外の数字になったところをまだ一度も見たことがありません、、、
175

2021/10/24 06:49

メッセージの中身が意図した通りの内容であるか確認してみてください
175

2021/10/24 07:16

あと必要な権限が全て付与されているかの確認もしたほうが良いと思います
pro_hro

2021/10/24 08:10

ありがとうございます。 リンク確認させていただきます。 sqsを送信するコード、受け取る際のコードを追記します。 権限に関しては時間がかかるとはいえ処理はされているので問題ないと考えているのですが、再度確認してみます。 ありがとうございます。
175

2021/10/24 08:25

あー、分かったかも 「処理中のメッセージ」はすでにlambda2で処理中のものですね 単純にlambda2の実行時間が長いだけではないでしょうか。
pro_hro

2021/10/24 11:55

ありがとうございます。 単体で実行すると数分もかからない程度なのですが、同時に実行すると時間がかかるというようなことはあるのでしょうか。。?
175

2021/10/24 16:18 編集

設定値を記載して下さりましたが、lambda2の同時実行数は1でしょうか? あと、バッチサイズを1に変更してみてください。 挙動としてはバッチサイズに指定した数までメッセージが増えると、ひとかたまりのメッセージバッチをイベントとしてlambdaを起動するそうです。 バッチウィンドウは、バッチサイズまでメッセージ数が増えるのを待機する時間(秒)のようです。
pro_hro

2021/10/25 00:56

ありがとうございます。 編集し、様子を見てみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問