【发布时间】: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