謎の文字列がついてきてしまう問題
このように
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
以下に直で指定することで無事にダウンロードできました。