Lambda 関数が LMI の非同期呼び出しで最大90分のタイムアウト設定をサポートしたので、15分超の継続動作を確認してみた
はじめに
2026年9月9日、Lambda Managed Instances(LMI)を使用する Lambda 関数の非同期呼び出しで、タイムアウトを最大90分まで設定できるようになりました。
対象は LMI 上での非同期呼び出しとイベントソースマッピング(ESM)経由の呼び出しです。同期呼び出しは従来どおり最大15分のままです。
本記事では、LMI を使用する Lambda 関数を非同期に呼び出し、15分を超えて実行できることを確認します。
検証内容
m6g.large を使用する Capacity Provider が用意された LMI 環境で、16分間実行される Lambda 関数をデプロイします。InvocationType=Event で非同期に呼び出し、CloudWatch Logs で15分超の継続動作を確認します。LMI の環境構築については、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)として上乗せされます。
LMI で Lambda 関数を長時間実行する場合は、通常の Lambda とは料金体系が異なる点も含め、十分に評価することをおすすめします。








