🔹結論
現状pythonのランタイムバージョンが3.12だと出力されない(3.11までは出力される)
python以外については未検証
他のランタイムバージョンにも波及する可能性あり
🔹詳細
以下の記事をもとにLambdaのタイムアウトエラーに対して通知できるような機能を実装しようとしたのですが、
「Task timed out after x.xx seconds」が出力されませんでした。
ネット上に情報が特になく、以下検証を実施しました。
🔸前提
・アーキテクチャ:x86_64
・タイムアウト:3秒
・コードの中身:
import json
def lambda_handler(event, context):
# TODO implement
while True:
pass
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
🔸検証結果
[Python 3.11](3.11以下のバージョンについても同じ)
なぜか3.12の場合のみ出力されない...
ランタイムのライブラリバージョンが関係しているのか。
参考:AWS LambdaのPythonランタイムとAWSが提供するLambdaレイヤのPythonライブラリを調べてみた。
🔹原因
なんとLambdaのログ出力形式が変更になっていました。
例 CloudWatch Logs ログ出力 (関数タイムアウト) - 旧形式
START RequestId: b70435cc-261c-4438-b9b6-efe4c8f04b21 Version: $LATEST
2024-03-04T17:22:38.033Z b70435cc-261c-4438-b9b6-efe4c8f04b21 Task timed out after 3.00 seconds
END RequestId: b70435cc-261c-4438-b9b6-efe4c8f04b21
REPORT RequestId: b70435cc-261c-4438-b9b6-efe4c8f04b21 Duration: 3004.92 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 33 MB Init Duration: 111.23 ms
例 CloudWatch Logs ログ出力 (関数タイムアウト) - 新形式
START RequestId: 527cb862-4f5e-49a9-9ae4-a7edc90f0fda Version: $LATEST
END RequestId: 527cb862-4f5e-49a9-9ae4-a7edc90f0fda
REPORT RequestId: 527cb862-4f5e-49a9-9ae4-a7edc90f0fda Duration: 3016.78 ms Billed Duration: 3016 ms Memory Size: 128 MB Max Memory Used: 31 MB Init Duration: 84.00 ms Status: timeout
また、この変更はTimeoutだけでなく、ランタイムのクラッシュのログ出力形式に関しても同様です。
今後数週間に全関数に適用...!!!??
[詳細]の項で記述した、re:Postで推奨方法がNGになりそうです。
Lambda関数のクラッシュやTimeoutをCloudWatch Logsで監視している方は要注意です。