AWS Lambda で /tmp を使う場合は tempfile モジュールで 立つ鳥跡を濁さず

Lambda を使っていると、時々ローカルにファイルを作成したい時がある。そんな時は /tmp 配下が使えるが、注意すべき点として以下がある。

  • 起動されたコンテナは再利用される場合がある(前回実行時のファイルは削除されない)
  • 容量は512MBまで

対策として作成するファイル名に uuid を付けたり、処理開始・終了時に /tmp 配下を削除していたが、tempfile モジュールの TemporaryDirectory を使えばよりスマートに後始末が出来る。

import tempfile
import os
import glob

def handler(event, context):

    # /tmp配下に一時ディレクトリを作成
    with tempfile.TemporaryDirectory(dir="/tmp") as d:
        print(os.listdir("/tmp"))

        # 一時ディレクトリ配下にファイルを作成
        with open(f"{d}/hello.txt", "w", encoding="utf-8") as f:
            f.write("world")
        
        print(glob.glob(f"{d}/*"))

    # withを抜けると自動で一時ディレクトリは削除される
    print(os.listdir("/tmp"))

with tempfile.TemporaryDirectory(dir="/tmp") as d:/tmp 配下に一時ディレクトリが作成され、withを抜けると自動で削除される。

START RequestId: 26488f5f-4c6f-4451-a1f5-9164b1a0ad7d Version: $LATEST
['tmpl4mx8879']
['/tmp/tmpl4mx8879/hello.txt']
[]
END RequestId: 26488f5f-4c6f-4451-a1f5-9164b1a0ad7d

tmpl4mx8879 という一時ディレクトリが作成され、自動で削除されていることが確認できる。

参考

AWS Lambda 実行コンテキスト - AWS Lambda

AWS Lambda の制限 - AWS Lambda