上传到S3后触发SWF工作流程

时间:2014-05-22 20:54:47

标签: amazon-web-services amazon-s3 amazon-swf

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

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

2 个答案:

答案 0 :(得分:7)

更新

AWS今天终于推出了New Event Notifications for Amazon S3,它确实只需通过 S3 API(如PUT,POST)扩展长期可用的PUT Bucket notification API以及额外的event types来创建对象。和COPY

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

初步答复

  

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

不幸的是没有这样的方式,你确实需要一个中介服务 - 虽然PUT Bucket notification显然也被设计为允许其他类型的事件,Amazon S3不支持Amazon SNS截至今天的Enabling RRS Lost Object Notifications以外的任何通知:

  

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

答案 1 :(得分:1)

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

  1. 设置lambda函数以在object-put事件上执行某些操作(在本例中,调用SWF)
  2. 配置存储桶以使用适当的用户和角色发布到该lambda函数
  3. 当该事件发生时,您的lambda函数将在AWS硬件上运行