Lambda のイベントソースマッピングで SQS を使用する際にバッチウィンドウを設定しても 20 秒後に関数が実行される理由を教えてください
困っていた内容
Lambda 関数のイベントソースマッピングで SQS キューを使用しています。
バッチウィンドウを 5 秒に設定したため、SQS キューへのメッセージ送信後に Lambda 関数が数秒以内に実行される想定でしたが、SQS キューへのメッセージ送信から約 20 秒後に Lambda 関数が実行されていました。
Lambda のイベントソースマッピングで SQS を使用する際にバッチウィンドウを設定しても 20 秒後に関数が実行される理由を教えてください。
どう対応すればいいの?
SQS キューのトラフィックがきわめて少ない可能性があります。
Amazon SQS での Lambda の使用 - AWS Lambda
バッチウィンドウを使用していて、SQS キューのトラフィックがきわめて少ない場合、Lambda は関数を呼び出す前に最大 20 秒間待機することがあります。
これは、バッチウィンドウを 20 秒未満に設定した場合であっても同様です。
例えば、SQS キューに 1 件だけメッセージを送信した場合、バッチウィンドウを 5 秒に設定していても Lambda 関数は 20 秒後に実行される可能性があります。
やってみた
まずは SQS の標準キューをデフォルト設定で作成しました。

Lambda 関数については以下の設定で作成しました。
- ランタイム: Python 3.14
- 実行ロール: AdministratorAccess 権限を付与したロール
- コード: 以下の通り
import json
from datetime import datetime
def lambda_handler(event, context):
invoke_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
message_count = len(event['Records'])
print(f"Lambda 関数呼び出し時刻: {invoke_time}")
for i, record in enumerate(event['Records'], 1):
message_body = record['body']
sent_timestamp = record['attributes']['SentTimestamp']
sent_time = datetime.fromtimestamp(int(sent_timestamp)/1000).strftime('%Y-%m-%d %H:%M:%S')
print(f"メッセージ: {message_body}")
print(f"SQS キューへのメッセージ送信時刻: {sent_time}")
return {
'statusCode': 200,
'body': json.dumps(f'Successfully processed {message_count} messages')
}
イベントソースマッピングの設定は以下の通りです。
- SQS キュー: 作成済みのキュー
- バッチサイズ: 10
- バッチウィンドウ: 5

上記設定後、SQS コンソールから 1 件のメッセージを送信します。

SQS キューへのメッセージ送信後、Lambda の実行ログには以下の内容が記録されていました。
Lambda 関数呼び出し時刻: 2026-01-24 05:22:48
メッセージ: test message
SQS キューへのメッセージ送信時刻: 2026-01-24 05:22:28
以上の結果より、SQS キューのトラフィックがきわめて少ない場合には、バッチウィンドウを設定していても SQS キューへのメッセージ送信から約 20 秒後に Lambda 関数が実行されることを確認できました。






