[Errno 2] No such file or directory: ‘/tmp/item/6534.pbf.C92d54EC’が発生した件、そして解決方法

概要

LambdaにてPythonのboto3ライブラリを用いてs3のファイルをダウンロードしているときに以下のエラーが発生。

[Errno 2] No such file or directory: '/tmp/item/6534.pbf.C92d54EC'

 

エラー発生環境

aws Lambda
Python10

 

エラーの詳細

[Errno 2] No such file or directory: '/tmp/item/6534.pbf.C92d54EC'

No such file or directoryなので「そんなファイルないよ!」って状態。

よく見ると以下の「ないよ!」と言われているファイル名、なんか変な拡張子がついている。

'/tmp/item/6534.pbf.C92d54EC'

実はこれs3からファイルを指定してダウンロードしてくる際のパス名にはもともとついてなかったもの。

なんだこれは。

原因・解決策

/tmp/item/というディレクトリを作成しておらず、存在しないディレクトリにダウンロードしたファイルを格納しようとしていたのが原因だった。

以下のようなダウンロードの前にディレクトリがなければ作成するコードを書いておくと問題なく動いた。

import boto3
import os

# S3クライアントの初期化
s3 = boto3.client('s3')

# バケット名とオブジェクトキーを指定
bucket_name = 'your-bucket-name'
object_key = 'your/object/key'
download_path = '/tmp/item/6534.pbf'

# ダウンロード先ディレクトリが存在しない場合にディレクトリを作成
directory = os.path.dirname(download_path)
if not os.path.exists(directory):
os.makedirs(directory)

# ファイルのダウンロード
s3.download_file(bucket_name, object_key, download_path)