AWS Lambda:与S3交互时出现“流结束”错误

时间:2019-06-11 06:57:30

标签: amazon-web-services aws-lambda

我有一个 AWS Lambda 函数,该函数从 S3 中读取文件,将其转换,然后将其写入另一个 S3 存储桶中。最初,该功能运行良好。但是,有时,在重复使用后,我会得到以下错误负载:

{
    "errorMessage": "End of stream",
    "errorType": "lambda_handler",
    "stackTrace": []
}

为什么?

1 个答案:

答案 0 :(得分:0)

我不确定您使用的是什么技术,但是在尝试再次读取之前,您是否正确配置了流并/或在流上定位0?

Lambda函数不能保证干净启动。实际上,这是重用先前容器的功能,该容器可能包含先前调用的状态

  

执行Lambda函数后,AWS Lambda会维护   在预期另一个Lambda的情况下执行上下文   函数调用。实际上,该服务会冻结执行   Lambda函数完成后的上下文,并解冻   重用(如果AWS Lambda选择在Lambda时重用上下文)   函数再次被调用。这种执行上下文重用方法具有   具有以下含义:

     

Lambda函数代码中的任何声明(在处理程序之外)   代码,请参阅编程模型)保持初始化状态,并提供其他   再次调用该函数时的优化。例如,如果您的   Lambda函数建立数据库连接,而不是   重新建立连接时,原始连接用于   后续调用。我们建议您在代码中添加逻辑以进行检查   创建连接之前是否存在连接。

     

每个执行上下文在以下位置提供512 MB的额外磁盘空间:   / tmp目录。目录内容在执行时保留   上下文被冻结,提供可用于以下目的的临时缓存   多次调用。您可以添加额外的代码来检查缓存是否具有   您存储的数据。有关部署限制的信息,请参阅   AWS Lambda限制。

     

由Lambda函数启动的后台进程或回调   如果AWS Lambda恢复了功能结束时未完成的操作   选择重用执行上下文。你应该确保任何   代码中的后台进程或回调(对于Node.js)   在代码退出之前完成。

https://docs.aws.amazon.com/lambda/latest/dg/running-lambda-code.html