概要
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)