Lambda 関数が LMI の非同期呼び出しで最大90分のタイムアウト設定をサポートしたので、15分超の継続動作を確認してみた

Lambda 関数が LMI の非同期呼び出しで最大90分のタイムアウト設定をサポートしたので、15分超の継続動作を確認してみた

Lambda Managed Instances(LMI)を使用する Lambda 関数では、非同期呼び出し時のタイムアウトを最大90分まで設定できます。本記事では、LMI 環境で関数を実行し、従来の15分制限を超えて動作することを確認しました
2026.09.10

はじめに

2026年9月9日、Lambda Managed Instances(LMI)を使用する Lambda 関数の非同期呼び出しで、タイムアウトを最大90分まで設定できるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/09/aws-lambda-90-minute-function/

対象は LMI 上での非同期呼び出しとイベントソースマッピング(ESM)経由の呼び出しです。同期呼び出しは従来どおり最大15分のままです。

本記事では、LMI を使用する Lambda 関数を非同期に呼び出し、15分を超えて実行できることを確認します。

検証内容

m6g.large を使用する Capacity Provider が用意された LMI 環境で、16分間実行される Lambda 関数をデプロイします。InvocationType=Event で非同期に呼び出し、CloudWatch Logs で15分超の継続動作を確認します。LMI の環境構築については、CDK を使用した先行記事を参照してください。

https://dev.classmethod.jp/articles/shoma-implemented-aws-lambda-managed-instances-with-aws-cdk/

Lambda 関数作成

LMI を使う Lambda 関数を作成するには、create-function の実行時に --capacity-provider-config を指定する必要があります。今回の検証では、作成済みの関数に update-function-configuration で後から Capacity Provider を追加できませんでした。

今回は16分間、10秒ごとに現在時刻を標準出力に出力する関数を用意しました。

import time
from datetime import datetime, timezone

def handler(event, context):
    """
    16分間、10秒ごとに現在時刻を標準出力に出力する。
    LMI の 90 分タイムアウト実証用(15 分超の動作確認)。
    """
    duration_seconds = 16 * 60  # 16 minutes
    interval = 10
    start = time.time()

    print(f"[START] {datetime.now(timezone.utc).isoformat()} duration={duration_seconds}s interval={interval}s", flush=True)

    tick = 0
    while time.time() - start < duration_seconds:
        elapsed = time.time() - start
        now = datetime.now(timezone.utc).isoformat()
        print(f"[TICK] {now} elapsed={elapsed:.1f}s tick={tick}", flush=True)
        time.sleep(interval)
        tick += 1

    total_elapsed = time.time() - start
    print(f"[DONE] {datetime.now(timezone.utc).isoformat()} total_elapsed={total_elapsed:.1f}s", flush=True)
    return {"status": "completed", "duration_seconds": duration_seconds, "total_elapsed": total_elapsed}

このコードを handler.py として保存し、ZIP ファイルにまとめてから関数を作成します。16分のループに余裕を持たせるため、タイムアウトは20分(1200秒)にします。

# 関数コードを ZIP ファイルにまとめる
zip function.zip handler.py

# Capacity Provider をアタッチしてタイムアウト 20 分(1200 秒)で関数を作成
aws lambda create-function \
  --function-name lmi-90min-test \
  --runtime python3.13 \
  --architectures arm64 \
  --role arn:aws:iam::123456789012:role/lmi-90min-test-lambda-exec-role \
  --handler handler.handler \
  --timeout 1200 \
  --memory-size 2048 \
  --zip-file fileb://function.zip \
  --capacity-provider-config '{"LambdaManagedInstancesCapacityProviderConfig":{"CapacityProviderArn":"arn:aws:lambda:ap-northeast-1:123456789012:capacity-provider:lmi-90min-test","PerExecutionEnvironmentMaxConcurrency":16,"ExecutionEnvironmentMemoryGiBPerVCpu":2.0}}' \
  --region ap-northeast-1

# バージョンを発行(Active になるまで数分かかる)
aws lambda publish-version \
  --function-name lmi-90min-test \
  --region ap-northeast-1

publish-version が完了し、バージョンの状態(State)が Active になれば、呼び出す準備が整います。

非同期呼び出し

LMI の Capacity Provider はバージョンにアタッチされているため、$LATEST ではなく publish-version で発行したバージョン番号を指定して呼び出します。

# VERSION には publish-version で得たバージョン番号を入れる(例: 1)
VERSION=1

aws lambda invoke \
  --function-name lmi-90min-test:${VERSION} \
  --invocation-type Event \
  --payload '{}' \
  /tmp/invoke-response.json \
  --region ap-northeast-1

InvocationType=Event の非同期呼び出しは 202(Accepted)を即座に返し、関数はバックグラウンドで実行を継続します。

CloudWatch Logs確認

関数の完了まで約16分待ってから、CloudWatch Logs のロググループ /aws/lambda/lmi-90min-test を確認します。

[START] 2026-09-10T01:05:20.310130+00:00 duration=960s interval=10s
[TICK] 2026-09-10T01:05:20.310198+00:00 elapsed=0.0s tick=0
[TICK] 2026-09-10T01:05:30.310319+00:00 elapsed=10.0s tick=1
[TICK] 2026-09-10T01:05:40.310468+00:00 elapsed=20.0s tick=2
...(中略: tick=3〜88 を10秒ごとに出力)...
[TICK] 2026-09-10T01:20:10.323429+00:00 elapsed=890.0s tick=89
[TICK] 2026-09-10T01:20:20.323577+00:00 elapsed=900.0s tick=90
[TICK] 2026-09-10T01:20:30.323723+00:00 elapsed=910.0s tick=91
[TICK] 2026-09-10T01:20:40.323867+00:00 elapsed=920.0s tick=92
[TICK] 2026-09-10T01:20:50.324017+00:00 elapsed=930.0s tick=93
[TICK] 2026-09-10T01:21:00.324167+00:00 elapsed=940.0s tick=94
[TICK] 2026-09-10T01:21:10.324317+00:00 elapsed=950.0s tick=95
[DONE] 2026-09-10T01:21:20.324472+00:00 total_elapsed=960.0s

15分(900秒)を過ぎてもログ出力が継続し、16分(960秒)で完了しています。platform.report に記録された実行時間は 960017.172 ミリ秒で、ステータスは成功でした。

まとめ

LMI 環境で非同期に呼び出す Lambda 関数では、タイムアウトを最大90分まで設定でき、今回の検証では15分を超えて16分間実行できることを確認しました。

ただし LMI では、リクエスト課金と EC2 インスタンス料金に加えて、EC2 オンデマンド料金の15%が管理費(Compute management fee)として上乗せされます。

https://aws.amazon.com/lambda/pricing/

LMI で Lambda 関数を長時間実行する場合は、通常の Lambda とは料金体系が異なる点も含め、十分に評価することをおすすめします。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事