3つ目のしくじりは、Lambdaでエラーが頻発したこと。「Lambdaの突然死」と古屋さんは表現する。
アイレットはある顧客向けに、S3から抜き出したzipファイルをLambda上のプログラムで解凍し、それをまた別のS3バケットに保管するという仕組みを実装した。これも運用を始めてしばらくの間は何の問題もなく動作していたものの、あるタイミングを境にLambdaで「No space left on device」(デバイス上の容量が不足している)というエラーが頻発するようになった。
だが、実際にはS3の容量には余裕があり、エラーの原因とは考えにくかった。そこでさまざまな仮説を立てて検証を進めた結果、Lambda上のディスク容量が枯渇していることが判明した。
Lambda上のプログラムでは、S3から受け取ったzipファイルを解凍し、いったんローカルのテンポラリディレクトリ上に展開した後、別のS3バケットへと渡していた。Lambdaのテンポラリディレクトリの上限は512MBだが、展開するファイルのサイズはそれより小さいため、問題が起こるとは予想していなかった。
しかしAWSのドキュメントをよく見てみると、「Lambda関数を連続して呼び出す場合、AWS Lambdaはできる限り実行コンテキストを再利用する」との記述が見つかった。つまり、Lambda上のプログラムが繰り返し呼び出された場合、テンポラリディレクトリが毎回クリアされるとは限らず、前回の処理で保存したファイルが残った状態のまま次の処理で再利用されるケースがあるということだ。
「最終的には、処理のたびにファイルを削除することで事なきを得た。『Lambdaは毎回使い切り』と勝手に思い込んでいると、同じようなワナにはまる可能性があるので、ユーザーは要注意だ」(古屋氏)
コロナ禍でテレワーク普及も、日本はクラウド後進国のまま? その裏にあるSI業界の病理
「リモートアクセスできない」――コロナ禍のテレワーク、ITインフラの課題が浮き彫りに 打開策は「クラウド」が首位
IaaS市場はなぜ伸びている? 大手3社の戦略の違いは? クラウド業界事情を基礎から徹底解説
「クラウドは信頼できない」は本当か? AWS、Office 365、自治体IaaSの障害を経て、私たちが知っておくべきこと
「君、今日からクラウド担当ね」 未経験者が1人で始めた、ファミマのAWS移行の舞台裏Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR