我想使用 AWS lambda 函数将视频上传到 S3。此视频在我的本地计算机中不可用。我有"下载网址"。我不想将其下载到本地计算机并将其上传到 S3。我正在寻找一种解决方案,可以使用lambda函数将此视频文件直接放入S3中。如果我使用缓冲区或流式处理,我将消耗大量内存。有没有更有效的解决方案?
我非常感谢您的帮助。
我有同样的问题,并开发了以下不依赖于/tmp
磁盘限制的快速解决方案。它使用下载流作为类似文件的对象。
特征:
- 没有外部 python 模块,使用 AWS Lambda Python 3.6 内置 boto3 和 urllib3
- 内置分块读取,适合下载大文件
- 通过 urllib3 池管理实现高效的连接和内存使用
-
使用可配置upload_fileobj内置分段和线程上传
import boto3 import botocore.vendored.requests.packages.urllib3 as urllib3 def lambda_handler(event, context): url='http://yourdownloadurl/file.tgz' # put your url here bucket = 'aws-s3-bucket' #your s3 bucket key = 'folder/filename' #your desired s3 path or filename s3=boto3.client('s3') http=urllib3.PoolManager() s3.upload_fileobj(http.request('GET', url,preload_content=False), bucket, key)
您当然可以编写一个 AWS Lambda 函数,该函数将:
- 从 URL 下载文件并将其存储在
/tmp
- 使用 AWS S3 开发工具包上传到 Amazon S3
最简单的方法是下载完整的文件,而不是尝试以"位"流式传输它。但是,请注意,可用于存储数据的磁盘空间限制为 500MB。如果您的下载内容大于 500MB,则需要进行一些创意编程来下载其中的部分内容,然后将其作为多部分上传方式上传。
至于如何下载它,请使用您喜欢的任何库来下载网络文件。