从 Lambda 函数一次性上传到 S3
Fire-and-forget upload to S3 from a Lambda function
我有一个 lambda 函数,在计算完成后,会进行一些调用以将元数据存储在 S3 和 DynamoDB 上。
S3 上传步骤是函数中最大的瓶颈,所以我想知道是否有办法“即发即弃”这些调用,这样我就不必在函数之前等待它们returns.
目前我运行使用 asyncio 并行处理所有上传调用,但 boto3/S3 put_object
调用仍然是一个大瓶颈。
我尝试使用 asyncio.create_task
到 运行 协程而不等待它们完成,但正如预期的那样,我收到一堆 Task was destroyed but it is pending!
错误并且上传实际上没有通过。
如果有办法做到这一点,我们可以节省很多账单,因为正如我所说,S3 是最大的瓶颈。这是可能的还是我必须处理 S3 上传时间?
If there was a way to do this,
遗憾的是没有,除非您要使用其他 lambda 函数为您上传。这样,您的主要功能将委托耗时的文件处理并以异步方式上传到第二个功能。然后,您的主函数可以 return 立即发送给调用者,第二个函数在后台完成繁重的工作。
无论哪种方式,您都必须为第一个或第二个函数的执行时间付费。
我有一个 lambda 函数,在计算完成后,会进行一些调用以将元数据存储在 S3 和 DynamoDB 上。
S3 上传步骤是函数中最大的瓶颈,所以我想知道是否有办法“即发即弃”这些调用,这样我就不必在函数之前等待它们returns.
目前我运行使用 asyncio 并行处理所有上传调用,但 boto3/S3 put_object
调用仍然是一个大瓶颈。
我尝试使用 asyncio.create_task
到 运行 协程而不等待它们完成,但正如预期的那样,我收到一堆 Task was destroyed but it is pending!
错误并且上传实际上没有通过。
如果有办法做到这一点,我们可以节省很多账单,因为正如我所说,S3 是最大的瓶颈。这是可能的还是我必须处理 S3 上传时间?
If there was a way to do this,
遗憾的是没有,除非您要使用其他 lambda 函数为您上传。这样,您的主要功能将委托耗时的文件处理并以异步方式上传到第二个功能。然后,您的主函数可以 return 立即发送给调用者,第二个函数在后台完成繁重的工作。
无论哪种方式,您都必须为第一个或第二个函数的执行时间付费。