Amazon s3 Python Boto3 Lambda上载临时文件

Amazon s3 Python Boto3 Lambda上载临时文件,amazon-s3,aws-lambda,boto3,Amazon S3,Aws Lambda,Boto3,我正在开发一个Lambda,它在S3存储桶中压缩图像文件。我可以下载Lambda中的图像,将其压缩为新文件。我正在尝试将新文件上载到同一个S3存储桶中,但不断遇到以下错误: module initialization error: expected string or bytes-like object 以下是要上传的代码: s3 = boto3.client('s3') s3.upload_file(filename,my_bucket,basename) 以下是其中一个测试上载的日志:

我正在开发一个Lambda,它在S3存储桶中压缩图像文件。我可以下载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以供审阅:


我还在脚本中将boto3客户端连接向上移动,认为这可能会影响上传,但我仍然以相同的顺序收到相同的错误。”“进程”是我的处理函数。

您的问题是这一行:

client.upload_file(filename,my_bucket,basename)
根据文档,格式为:

client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')
请注意,bucket名称是一个字符串。这就是错误显示预期字符串的原因

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

my_bucket = s3.Bucket(bucket)

您应该使用bucket的名称,而不是bucket对象。

您的问题是这一行:

client.upload_file(filename,my_bucket,basename)
根据文档,格式为:

client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')
请注意,bucket名称是一个字符串。这就是错误显示预期字符串的原因

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

my_bucket = s3.Bucket(bucket)

您应该使用bucket的名称,而不是bucket对象。

能否显示更多代码,尤其是Lambda处理程序?这些原木中有多少来自Lambda?
开始之前的一切都来自哪里?我怀疑该函数没有正确启动,因此它甚至没有接近您的
upload\u file()
命令。我最终通过使用aws lambda image找到了一个有效的解决方案。它是用Node编写的,Node不是我喜欢的语言,但它确实有效。我仍然很想在Python3中得到一些有用的东西。话虽如此,它似乎确实要复杂得多。听起来Lambda函数似乎没有配置为与处理程序名称匹配。如果您想继续使用Python版本,请添加更多详细信息。@JohnRotenstein如果您查看代码,您可以看到入口点是进程。我在代码中加入了打印语句,因此它的配置绝对正确。我缺少的是上传文件部分如何/为什么没有得到正确处理,即使其中肯定有一个图像被读取为字节。请您展示更多的代码,尤其是Lambda处理程序,好吗?这些原木中有多少来自Lambda?
开始之前的一切都来自哪里?我怀疑该函数没有正确启动,因此它甚至没有接近您的
upload\u file()
命令。我最终通过使用aws lambda image找到了一个有效的解决方案。它是用Node编写的,Node不是我喜欢的语言,但它确实有效。我仍然很想在Python3中得到一些有用的东西。话虽如此,它似乎确实要复杂得多。听起来Lambda函数似乎没有配置为与处理程序名称匹配。如果您想继续使用Python版本,请添加更多详细信息。@JohnRotenstein如果您查看代码,您可以看到入口点是进程。我在代码中加入了打印语句,因此它的配置绝对正确。我缺少的是如何/为什么上传文件部分无法得到正确处理,即使其中肯定有一个图像被读取为字节。