通过带有响应的 AWS Lambda 上传和处理文件

Posted

技术标签:

【中文标题】通过带有响应的 AWS Lambda 上传和处理文件【英文标题】:File upload and processing via AWS Lambda with response 【发布时间】:2021-12-25 01:47:21 【问题描述】:

我的目标是上传一个包含 python 项目的 .zip 文件,对其进行处理并返回一个 json。为此,我实现了一个 webapp,它通过拖放获取 .zip 文件。我想用 AWS Lambda 处理这个 .zip 文件并将 json 返回给 webapp,但由于 Lambda 必须接收、解压缩和读取文件,我猜它迫使我使用 S3。我可以从我的 webapps javascript 直接上传到 S3,并让 S3 为每个上传的文件触发 Lambda。但后来我失去了我的 webapp 和 Lambda 之间的这种典型的请求响应语义,因为 Lambda 的 S3 触发器是异步的,这样 Lambda 不知道该响应谁。

我想我的问题在某种程度上是概念性的,所以我基本上怎样才能以任何形式或形式从我的 webapp 发送请求,以便 lambda 可以处理我的 webapp 发送的文件并以包含 json 的形式发送响应一些信息,回到 webapp?

【问题讨论】:

【参考方案1】:

你不能在这里真正进行同步处理。 API Gateway 会将 Lambda 响应时间限制为 29 秒,因此如果您的文件非常小,您很可能无法适应这段时间。

我的建议如下:

将文件上传到 S3 并在上传成功完成后触发 Lambda。使用 Lambda 函数处理文件(这可以运行 15 分钟)。处理完成后,将输出保存到已知位置,例如 DynamoDB 表。您可以从前端轮询此位置,以查看处理是否完成。

【讨论】:

以上是关于通过带有响应的 AWS Lambda 上传和处理文件的主要内容,如果未能解决你的问题,请参考以下文章

带有 Lambda 函数的 AWS EBS 与 EFS

尝试使用 ffmpeg 时 AWS Lambda 权限被拒绝

使用AWS步骤函数处理大量数据?

如何在 Node.js 中使用带有 API 网关的 AWS Lambda 发送二进制响应? [复制]

AWS lambda 函数-“发生错误:收到来自 Lambda 的错误响应:已处理”

使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶