amazon-web-services - 拦截 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*
字段。但如果我理解正确,它只是让流量通过代理服务器传递,而无需在代理服务器上引入任何处理步骤或更改文件大小等。
解决方案
你不能真正拦截对 S3 的 API 调用(如果我理解你的要求)并让你自己的 API 接收调用 - 这样做的能力会破坏 S3 的 API 调用的信任链。
您在这里有两个选项可以执行类似于您所要求的操作:
- 创建您自己的 API,并让用户上传到您的 API 以处理文件。这样做的好处是对您的用户来说更加同步(即,您的处理在上传时立即发生,在文件在 S3 上可用之前),但是它的缺点是迫使您处理正在进行转换的服务的所有扩展。如果你搞砸了缩放,用户文件上传将在负载过重时失败。这可能看起来像普通的旧 ec2 服务器、ECS 容器、lambda+api 网关等。托管 Web 服务器的方法有很多种。
- 创建一个 SQS 队列,用于侦听上传到 S3 的 S3 文件。然后,您的用户会将文件直接上传到 S3(如果它是不受信任的用户,请确保查找已签名的 URL),并且您将收听 SQS 队列以了解何时处理消息(创建输出文件)。在这种情况下,您可能希望将输出文件存储到单独的 S3 存储桶中以避免处理循环。这样做的好处是允许您依靠 S3 的内置缩放来处理大负载时间,但它的缺点是您的处理与用户异步。如果他们上传文件,他们不会立即将其视为输出。
还有其他可能影响您的设计的软因素(例如您是否允许上传非常大的文件,这会将您推向解决方案#2),但这是您所要求的两种常见设计模式。
推荐阅读
- python - 如何处理 RuntimeWarning:从未等待协程“new_account”
- c++ - 为什么在头文件中定义 `const int` 时没有重复定义错误?
- android - 在我从多任务托盘刷我的应用程序后,FCM 服务被杀死
- css - 一些 CSS 类选择器在 React 中不起作用
- rust - 错误:无法为“gmp-mpfr-sys v1.4.0”运行自定义构建命令
- ruby - 运行 ruby 测试时在 $PATH 中找不到 Jenkinsfile docker exec 错误可执行文件
- php - 无法在 CakePHP 4 中使用 setUser 在 Auth 中设置用户
- sql - Presto TIMESTAMP 从 2 天前获取数据而不输入年月日期?
- scala - 将长准引用匹配器存储在变量中
- java - 我不明白为什么 array[0] 和 [1] 变为 null