实现用于从文件服务器归档文件的 AWS lambda 应用程序的方法

问题描述 投票:0回答:1

我想寻求有关如何实施 AWS Lambda 应用程序(在我们团队的 AWS 账户中)来执行文件归档任务的建议。

目标

要存档 Windows Server 共享文件夹(可通过 SMB 连接)上托管的文件:
(1) 检查文件夹名称是否对应从今天起超过 18 个月的日期
(2) 如果是上述情况,请将该文件夹的副本下载到 S3 存储桶中(在其他团队的 AWS 帐户中,该帐户与我们托管 Lambda 应用程序的帐户不同)
(3)删除文件服务器中的文件夹

设置

文件服务器中的文件夹按月份分组,然后按日期分组。
每个日文件夹包含超过10GB的数据。



实施

我被要求为此目的实现一个基于 Java Spring Boot 的 AWS Lambda 应用程序。

以下是我对 Lambda 的想法:

(1) Lambda 每天都会按计划触发
(2) 连接文件服务器
(3) 列出并循环文件夹名称,并查找文件夹名称的日期早于今天 18 个月的文件夹
(4) 将文件夹复制到Lambda应用程序本地
(5) 将 Lambda 应用程序中的文件夹复制到目标 AWS S3 存储桶中的 S3 存储桶中
(6) 复制完成后,从 Lambda 应用程序和源文件服务器中删除该文件夹

问题

(1) 我一直在研究可以使用的库,目前找到的是“Spring Integration”。这是合适的库吗? 参考号 https://docs.spring.io/spring-integration/reference/smb.html

(2)通过遵循 https://docs.spring.io/spring-integration/reference/smb.html#outbound-gateway-java-dsl 的示例,我能够将文件从文件服务器复制到本地.

如何循环遍历文件服务器上的文件夹名称,并检查是否有文件夹名称的日期与目标日期范围匹配?

(3) 是否可以批量进行操作(列出、下载、上传、删除)以提高效率?

(4) 有没有办法实现这一点,以便我们可以从文件服务器下载文件夹并即时上传到 AWS S3,而不需要先将文件夹下载到 Lambda 本地?
我知道Lambda最多只能有10GB内存,运行时间为15分钟。

(5) 如果我们必须先将文件夹下载到Lambda本地,那么这里的操作逻辑最好的优化方法是什么?
例如逐一下载、上传和删除文件夹会产生开销。

java amazon-web-services spring-boot aws-lambda spring-integration
1个回答
0
投票

我从未实现过AWS Lambda,但根据您的解释和要求,听起来Spring Integration与相应通道适配器确实是一个可以帮助您的工具。

因此,确实要从 SMB 读取针对目录的动态模式,我们必须使用

SmbOutboundGateway
nlst
命令,并提供
FileListFilter
与基于日期的模式匹配。

目录名称的结果列表,可以发送到下一个

SmbOutboundGateway
的拆分器,其中
ls
命令已经从每个目录中获取文件。

然后您将

List<SmbFileInfo>
发送到另一个拆分器,将这个远程文件一一发送到 S3。

但在此之前你可以使用变压器来获得

InputStream
:

.<SmbFileInfo, InputStream>transform(payload -> payload.getFileInfo().getInputStream())

最终,

S3MessageHandler
能够从请求消息中获取
InputStream
并将其发布到S3存储桶中。

是的,

S3MessageHandler
能够传输整个目录,但它确实必须位于当前文件系统的本地。

我建议你的解决方案脱离了批量支持和控制,但同时它不使用本地文件系统。

您还可以使用拆分器输出通道作为

ExecutorChannel
,以便能够并行生成(并因此在下游处理)拆分项目。

在 Spring Integration 文档中查看更多信息:

https://docs.spring.io/spring-integration/reference/channel/implementations.html#executor-channel

https://docs.spring.io/spring-integration/reference/splitter.html

https://docs.spring.io/spring-integration/reference/smb.html

https://github.com/spring-projects/spring-integration-aws

© www.soinside.com 2019 - 2024. All rights reserved.