📝

[小ネタ] Lambda のファイルディスクリプタ超過時のエラーを確認してみた

に公開

Lambda クォータ - AWS Lambda

リソース クォータ
ファイルディスクリプタ 1,024

以下のエラーが発生しました。

OSError: [Errno 24] Too many open files: 'ファイル名'

検証コード

import os

def lambda_handler(event, context):
    open_files = []
    try:
        for i in range(2000):
            f = open("/tmp/testfile.txt", "w")
            open_files.append(f)
            f.write("test\n")
        return {
            'statusCode': 200,
            'body': f'Successfully opened {len(open_files)} files'
        }
    except OSError as e:
        return {
            'statusCode': 500,
            'body': str(e)
        }

実行結果は以下の通りです。

{
  "statusCode": 500,
  "body": "[Errno 24] Too many open files: '/tmp/testfile.txt'"
}

Too many open files というエラーであることを確認できました。

上限について

Lambda クォータ - AWS Lambda

関数の設定、デプロイ、実行には、次のクォータが適用されます。特に明記されていない限り、変更できません。

上記ドキュメントの通り、ファイルディスクリプタの上限である 1,024 はハードリミットであるため上限緩和できません。
そのため、コードレベルでファイルをクローズするなどの対応が必要です。

まとめ

今回は Lambda のファイルディスクリプタ超過時のエラーを確認してみました。
どなたかの参考になれば幸いです。

参考資料

Discussion