【问题标题】:FileNotFoundError with leading slash issue on AWS Lambda with Python带有 Python 的 AWS Lambda 上带有前导斜杠问题的 FileNotFoundError
【发布时间】:2018-03-25 14:38:52
【问题描述】:

我的开发环境是一台 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)

最简单的处理方法是什么?

【问题讨论】:

  • file_name的值从何而来?

标签: python amazon-s3 aws-lambda


【解决方案1】:

听起来您希望将文件下载到

  • C:\tmp 在 Windows 上
  • /tmp 在您的 lambda 容器 (linux) 上

使用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)

【讨论】:

    【解决方案2】:

    在 MS Windows 上 os.path.join 使用 \ 不适用于 s3 路径

    Lambda 在 Linux 主机上运行,​​所以 os.path.join 是 s3 喜欢的 /

    要修复它,硬连线连接以使用/

    new_file_key = '/'.join(['/tmp', file_name])
    

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 2016-07-14
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2017-07-28
      • 2013-08-24
      相关资源
      最近更新 更多