Lambda のイベントソースマッピングで SQS を使用する際にバッチウィンドウを設定しても 20 秒後に関数が実行される理由を教えてください

Lambda のイベントソースマッピングで SQS を使用する際にバッチウィンドウを設定しても 20 秒後に関数が実行される理由を教えてください

2026.02.18

困っていた内容

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 の標準キューをデフォルト設定で作成しました。
2026-01-24_14h17_33

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

2026-01-24_14h21_22

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

SQS キューへのメッセージ送信後、Lambda の実行ログには以下の内容が記録されていました。

Lambda 関数呼び出し時刻: 2026-01-24 05:22:48
メッセージ: test message
SQS キューへのメッセージ送信時刻: 2026-01-24 05:22:28

以上の結果より、SQS キューのトラフィックがきわめて少ない場合には、バッチウィンドウを設定していても SQS キューへのメッセージ送信から約 20 秒後に Lambda 関数が実行されることを確認できました。

参考資料

この記事をシェアする

FacebookHatena blogX

関連記事