3

我有一个工作流,它在 S3 存储桶中获取一个文件,并根据文件内容进行大量处理和进一步请求。目前,客户端必须在上传文件后手动触发工作流。这对我来说似乎是一个非常常见的用例,那么有什么方法可以在文件上传后立即触发工作流程?

我想在两者之间应该有一个 SNS 通知,但是有没有办法将通知直接发送到 SWF,而无需服务使用它们并启动工作流?

4

2 回答 2

7

更新

AWS 今天终于为 Amazon S3 推出了新的事件通知,它实际上只是简单地扩展了长期可用的PUT Bucket 通知API,增加了用于通过S3 API(例如 PUT、POST 和 COPY)创建对象的事件类型

  • s3:ObjectCreated:*
  • s3:ObjectCreated:Put
  • s3:ObjectCreated:Post
  • s3:ObjectCreated:Copy
  • s3:ObjectCreated:CompleteMultipartUpload

初步答案

[...] 有没有办法将通知直接发送到 SWF,而无需服务使用它们并启动工作流程?

不幸的是,没有这样的方法,您确实需要中介服务 - 虽然PUT Bucket 通知显然也被设计为允许其他类型的事件,但Amazon S3不支持Amazon SNS通知,但启用 RRS 丢失对象通知为今天的:

PUT 操作的此实现使用notification子资源来启用存储桶的指定事件的通知。目前,s3:ReducedRedundancyLostObject事件是通知唯一支持的事件s3:ReducedRedundancyLostObject当 Amazon S3 检测到它已丢失对象的所有副本并且无法再为该对象的请求提供服务时,将触发该事件。[强调我的]

于 2014-05-23T15:26:15.380 回答
1

正如 Steffen Opel 所说,目前还没有办法做到这一点。但是,他提供的更新答案的替代途径是使用 AWS 的新事件处理服务Lambda(该 ATM 处于预览状态)。向您展示如何为 S3 配置它的文档在这里,但在较高级别:

  1. 设置一个 lambda 函数以对对象放置事件执行某些操作(在本例中,调用 SWF)
  2. 配置存储桶以使用适当的用户和角色发布到该 lambda 函数
  3. 当该存储桶发生事件时,您的 lambda 函数将在 AWS 硬件上运行
于 2014-11-19T08:37:10.183 回答