【AWS Lambda】AWS Lambda で突然の死!
AWS Lambda
がなぜかログも突然の死!何も言わずにただただ死んでいく!?
なぜだ!?
ログが出ない
AWS Lambda
をでは stdout
または stderr
に書き込む事によって CloudWatch Logs
にログが出されます。
だがなぜか出ない。
以下のような開始、終了、レポートしか出力されない状況に陥ってしまいました。
|
|
ログが出ない原因
ログが出ない原因は2つほどありました。
タイムアウト
処理がタイムアウトするとタイムアウト時点で Lambda
落ちるようです。
試してみて以下のような流れを感じました。Lambda
処理終了 → Lambda
の stdout
stderr
を CloudWatch Logs
に送信 → Lambda
終了
この流れのため Lambda
がタイムアウト時点でいっぱいまで動くとログを送信する時間がないように感じます。
timeoutMs - バッチをバッファーする最大時間(ミリ秒単位)。デフォルト: 1,000。最小: 25 最大: 30,000。
対策は タイムアウトさせない ことです。
ログ出力
Lambda
はログの出力容量が以下の決まっております。
maxBytes - メモリにバッファするログの最大サイズ (バイト単位)。デフォルト: 262,144。最小: 262,144。最大: 1,048,576。
このため大量のログを送るとクラッシュします。
Lambda は、ランタイムがクラッシュした場合など、入力ストリームが閉じられている場合、ログをフラッシュします。
僕の場合、デバッグ用のログを大量に入れていたのでランタイムがクラッシュ → タイムアウトまで時間を食いつぶすという現象でした。
対策は stdout
stderr
を通さず、直接 CloudWatch Logs
にログを送る ことです。
そうすることによりランタイムがクラッシュしない、タイムアウトしてもログが CloudWatch Logs
に残ります。