ITmedia NEWS >

身に覚えのない170万円の請求が……AWSの運用管理で起きた“4つのしくじり”(3/4 ページ)

» 2020年08月17日 07時00分 公開
[吉村哲樹ITmedia]

AWS Lambdaが突然死

 3つ目のしくじりは、Lambdaでエラーが頻発したこと。「Lambdaの突然死」と古屋さんは表現する。

 アイレットはある顧客向けに、S3から抜き出したzipファイルをLambda上のプログラムで解凍し、それをまた別のS3バケットに保管するという仕組みを実装した。これも運用を始めてしばらくの間は何の問題もなく動作していたものの、あるタイミングを境にLambdaで「No space left on device」(デバイス上の容量が不足している)というエラーが頻発するようになった。

photo 「AWS Lambda」

 だが、実際にはS3の容量には余裕があり、エラーの原因とは考えにくかった。そこでさまざまな仮説を立てて検証を進めた結果、Lambda上のディスク容量が枯渇していることが判明した。

 Lambda上のプログラムでは、S3から受け取ったzipファイルを解凍し、いったんローカルのテンポラリディレクトリ上に展開した後、別のS3バケットへと渡していた。Lambdaのテンポラリディレクトリの上限は512MBだが、展開するファイルのサイズはそれより小さいため、問題が起こるとは予想していなかった。

 しかしAWSのドキュメントをよく見てみると、「Lambda関数を連続して呼び出す場合、AWS Lambdaはできる限り実行コンテキストを再利用する」との記述が見つかった。つまり、Lambda上のプログラムが繰り返し呼び出された場合、テンポラリディレクトリが毎回クリアされるとは限らず、前回の処理で保存したファイルが残った状態のまま次の処理で再利用されるケースがあるということだ。

 「最終的には、処理のたびにファイルを削除することで事なきを得た。『Lambdaは毎回使い切り』と勝手に思い込んでいると、同じようなワナにはまる可能性があるので、ユーザーは要注意だ」(古屋氏)

Copyright © ITmedia, Inc. All Rights Reserved.