我的开发环境是Windows机器。当尝试从本地S3下载文件时,它没有问题。但是,当我将函数加载到Lambda时,我收到FileNotFoundError
错误,该错误是由Lambda需要文件密钥中的前导斜杠引起的。
这适用于本地,但不适用于Lambda ......
s3 = boto3.resource('s3')
new_file_key = os.path.join('tmp', file_name)
s3.Bucket('bucketname').download_file(file_key, new_file_key)
这适用于Lambda,但不适用于本地......
s3 = boto3.resource('s3')
new_file_key = os.path.join('/tmp', file_name)
s3.Bucket('bucketname').download_file(file_key, new_file_key)
最简单的处理方法是什么?
答案 0 :(得分:2)
听起来您希望将文件下载到
C:\tmp
/tmp
使用this SO answer作为参考,以下内容应以平台无关的方式运行:
s3 = boto3.resource('s3')
new_file_key = os.path.abspath(os.path.join(os.sep, 'tmp', file_name))
s3.Bucket('bucketname').download_file(file_key, new_file_key)
答案 1 :(得分:0)
On MS Windows os.path.join
uses \
which doesn't work with s3 paths
The Lambda is running on a Linux host so os.path.join
is /
which s3 likes
To fix it hardwire the join to use /
new_file_key = '/'.join(['/tmp', file_name])