将数据从 S3 存储桶移动到外部供应商 SFTP

Move data from S3 bucket to external vendor SFTP

我需要将文件从 S3 存储桶发送到外部客户端。 FTP 或 SFTP 可用于此。基于某些研究,我发现这可以使用 Lambda 或使用 EC2 来完成,但找不到详细的步骤。请告诉我如何做到这一点。

Amazon S3 无法在任何地方 "send" 文件。

因此,您需要一些代码 运行 'somewhere' 将:

  • 从 Amazon S3 下载文件
  • 通过 SFTP 将文件发送到外部客户端

这一切都很容易编写脚本。困难可能在于决定 发送哪些 文件以及如何处理任何错误。

您可能找不到关于该主题的任何文档,因为通过 SFTP 发送文件与 AWS 没有任何具体关系。只需按照您在任何地方的方式进行即可。

例如,假设您想通过 Python 程序 运行 在 Amazon EC2 实例上或作为 AWS Lambda 函数来执行此操作:

  1. 使用适用于 Python (boto3) 的 AWS 开发工具包下载所需文件。参见:Amazon S3 examples
  2. 通过 SFTP 发送文件。参见:

遇到了类似的需求,这可以使用 lambda 函数轻松完成。

我们用例的功能要求是在文件准备好发送回客户时自动传输文件。

建筑

我们为基本用例提出了这种简单的架构。

工作流

  1. 将文件上传到 S3 存储桶
  2. 触发 lambda 函数的推送事件通知。最好为每个客户端使用单独的 lambda 函数,以便我们可以将所有 SFTP 连接详细信息存储在环境变量中。 环境变量将用于存储服务器详细信息、凭据、文件路径等...
  3. Lambda 函数将从 S3 存储桶中获取文件
  4. Lambda 会将文件传输到外部服务器。

值得补充

值得考虑在这种简单方法之上进行更改

  1. 如果 Lambda 函数未能获取文件,那么它应该重试几次,如果仍然失败,他们应该向正在将文件上传到 S3 存储桶的客户端发送通知。
  2. 如果外部传输失败,那么 Lambda 应该将其添加到任何应用程序可以处理消息并通知系统的任何 SQS 队列,我们​​也可以设置几天后重试。