13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS Lambdaでbotoを使ってファイルをダウンロードするときのハマりポイント

Posted at

謎の文字列がついてきてしまう問題

このように

s3 = boto3.client("s3")
pdf_filepath = 'tmp/' + key.split('/')[-1]
print(pdf_filepath)
# => tmp/20191016101246759.pdf
s3.download_file(bucket, key, pdf_filepath)

S3からファイルをダウンロードするコードを動かすと
[ERROR] FileNotFoundError: [Errno 2] No such file r directory: 'tmp/20191016101246759.pdf.47cf5CFA'
このような感じで謎の文字列がついてきてしまい、エラーでダウンロードできません。

Lambdaで変更できるファイルの制限

Lambdaでは、

  • /tmp以下のファイルしか変更することができない
  • /tmp以下でも階層構造にすることはできない(/tmp以下にディレクトリを作成することはできない)

という制限があります。
なので、/tmp以外の場所にダウンロードしようとしたり/tmp/food/chocolate.jpgというようにディレクトリに区切ってダウンロードしようとするとエラーになってしまいます。

解決法

今回の場合、tmp/に保存しようとしていまっているので

s3 = boto3.client("s3")
pdf_filepath = '/tmp/' + key.split('/')[-1]
print(pdf_filepath)
# => /tmp/20191016101246759.pdf
s3.download_file(bucket, key, pdf_filepath)

/tmp以下に直で指定することで無事にダウンロードできました。

13
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?