我正在构建一个用户可以上传图像的应用程序,为此我使用 S3 作为文件存储。
在应用程序的其他区域,EC2 上部署了一些需要使用上传图像的进程。 此过程需要多次图像(它会生成一些报告),并且它是多个 EC2 的一部分 - 使用弹性豆茎。
该过程不需要一次需要所有图像,而是需要它获得的每个作业的一些子集(取决于它获得的参数)。
每个 ec2 实例都在执行独立的工作 - 它们之间不共享文件,但它们可能需要相同的上传图像。
我现在正在做的是将所有图像从 s3 下载到 EC2 机器,因为它需要本地文件。 我读到 EFS 可以安装到 EC2,然后我可以像访问本地存储一样访问它。
我没有找到任何使用nodejs(或其他语言)直接上传到EFS的示例,但我找到了一种将文件从S3传输到EFS的方法 - “DataSync”。 https://docs.aws.amazon.com/efs/latest/ug/transfer-data-to-efs.html
所以我有3个问题:
对于这种具体情况,我们使用 https://github.com/kahin/goofys
它非常可靠,此外,还能够将 S3 存储桶作为文件夹安装在任何设备上 - Windows、Mac,当然还有 Linux。
也可以在 AWS 云“边界”之外工作 - 非常适合开发人员笔记本电脑。
缺点是它/不/在 Lambda 上下文中工作,但你不能拥有一切!
文件上传到s3时触发Lambda调用ECS任务。 ECS 任务启动并挂载 EFS 卷,并将文件从 s3 复制到 EFS。 对于非常大的文件,这不会遇到 Lambda 超时的问题。 我没有代码,但如果有人已经编码了此解决方案,我会很感兴趣。