首页 > 解决方案 > 拦截 AWS S3 请求

问题描述

嗨,我正在寻找实现这样的工作流程

Input-files => S3 (regular/multipart) uploader => My-processing-server => Output-files => S3 (regular/multipart) uploader => AWS-S3-server

换句话说,Input-files预计将My-processing-server作为 S3 请求上传到,以便My-processing-server可以处理Input-files生成Output-files,然后将其上传到AWS-S3-server.

我想知道如何设置可以通过 S3 APIMy-processing-server接受的内部。Input-files

注意:我注意到客户端配置允许配置proxy*字段。但如果我理解正确,它只是让流量通过代理服务器传递,而无需在代理服务器上引入任何处理步骤或更改文件大小等。

标签: amazon-web-servicesamazon-s3

解决方案


你不能真正拦截对 S3 的 API 调用(如果我理解你的要求)并让你自己的 API 接收调用 - 这样做的能力会破坏 S3 的 API 调用的信任链。

您在这里有两个选项可以执行类似于您所要求的操作:

  1. 创建您自己的 API,并让用户上传到您的 API 以处理文件。这样做的好处是对您的用户来说更加同步(即,您的处理在上传时立即发生,在文件在 S3 上可用之前),但是它的缺点是迫使您处理正在进行转换的服务的所有扩展。如果你搞砸了缩放,用户文件上传将在负载过重时失败。这可能看起来像普通的旧 ec2 服务器、ECS 容器、lambda+api 网关等。托管 Web 服务器的方法有很多种。
  2. 创建一个 SQS 队列,用于侦听上传到 S3 的 S3 文件。然后,您的用户会将文件直接上传到 S3(如果它是不受信任的用户,请确保查找已签名的 URL),并且您将收听 SQS 队列以了解何时处理消息(创建输出文件)。在这种情况下,您可能希望将输出文件存储到单独的 S3 存储桶中以避免处理循环。这样做的好处是允许您依靠 S3 的内置缩放来处理大负载时间,但它的缺点是您的处理与用户异步。如果他们上传文件,他们不会立即将其视为输出。

还有其他可能影响您的设计的软因素(例如您是否允许上传非常大的文件,这会将您推向解决方案#2),但这是您所要求的两种常见设计模式。


推荐阅读