【问题标题】:Python Boto3 Lambda Upload Temp FilePython Boto3 Lambda 上传临时文件
【发布时间】:2019-04-23 13:21:25
【问题描述】:

我正在开发一个压缩 S3 存储桶中的图像文件的 Lambda。我可以在 Lambda 中下载图像,将其压缩为新文件。我正在尝试将新文件上传到同一个 S3 存储桶,但我不断遇到以下错误:

module initialization error: expected string or bytes-like object

这是要上传的代码:

s3 = boto3.client('s3')
s3.upload_file(filename,my_bucket,basename)

以下是其中一个测试上传的日志:

Getting ready to download Giggidy.png
This is what we're calling our temp file: /tmp/tmp6i7fvb6z.png
Let's compress /tmp/tmp6i7fvb6z.png
Compressed /tmp/tmp6i7fvb6z.png to /tmp/tmpmq23jj5c.png
Getting ready to upload /tmp/tmpmq23jj5c.png
File to Upload, filename: /tmp/tmpmq23jj5c.png
Mime Type: image/png
Name in Bucket, basename: tmpmq23jj5c.png
START RequestId: e9062ca9-ed2c-11e9-99ee-e3a40680ga9d Version: $LATEST
module initialization error: expected string or bytes-like object
END RequestId: e9062ca9-ed2c-11e9-99ee-e3a40680ga9d

如何在 Lambda 上下文中上传文件?

更新:我已将代码上传到 gist 以供审核:https://gist.github.com/kjenney/068531ffe01e14bb7a2351dc55592551

我还在我的脚本中向上移动了 boto3 客户端连接,认为这可能会导致上传,但我仍然以相同的顺序收到相同的错误。 'process' 是我的处理函数。

【问题讨论】:

  • 能否请您展示更多代码,尤其是您的 Lambda 处理程序?这些日志中有多少来自 Lambda? START 之前的一切从何而来?我怀疑该功能没有正确启动,所以它甚至没有靠近你的upload_file() 命令。
  • 我最终通过使用 aws-lambda-image 得到了一个可行的解决方案。它是用 Node 编写的,这不是我的首选语言,但它确实有效。我仍然希望在 Python3 中得到一些工作。话虽如此,它似乎确实涉及更多。
  • 听起来 Lambda 函数没有配置为匹配您的 Handler 名称。如果您想让 Python 版本继续运行,请添加更多详细信息。
  • @JohnRotenstein 如果您查看代码,您可以看到入口点是进程。我已经通过代码散布了打印语句,因此它肯定配置正确。我缺少的是 upload_file 部分如何/为什么没有得到正确处理,即使那里肯定有一个图像被读取为字节。

标签: amazon-s3 aws-lambda boto3


【解决方案1】:

你的问题是这一行:

client.upload_file(filename,my_bucket,basename)

从文档来看,格式是:

client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')

请注意,存储桶名称是一个字符串。这就是错误提示 expected string 的原因。

但是,您的代码将my_bucket 设置为:

my_bucket = s3.Bucket(bucket)

您应该使用存储桶的名称,而不是存储桶的对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2021-04-23
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    相关资源
    最近更新 更多