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
という一時ディレクトリが作成され、自動で削除されていることが確認できる。