触发S3创建事件

时间:2016-04-20 16:42:54

标签: events amazon-s3

我使用S3 Create事件来触发AWS-Lambdas。如果我的处理失败,我想做一些魔术,然后再次触发“事件”以启动我的处理更多。到目前为止,我看到的唯一选择是重新上传文件。

  

我可以“再次”触发事件而无需重新上传文件吗?

我使用Python和boto3。

3 个答案:

答案 0 :(得分:14)

今天我遇到了类似的情况,我需要在文件已经进入S3后重新触发Lamda功能。我的一位同事提出了以下有效的方法:

  1. 安装AWS cli tool
  2. 执行类似的事情:

    for ((i=1; ; i++)); do
        contents=$(curl -H "Authorization: Token insertlongtokenhere" -H "Content-Type: application/json" https://api.app.secunia.com/api/tickets/?page=$i)
        echo "$contents"
        if [[ $contents =~ 'next":null' ]]
        then break
        fi
    done
    

答案 1 :(得分:7)

如果不再次上传文件,则无法再次启用S3事件触发器。但是,对于失败的处理事件,如果您使用的是Lambda,它将按FAQ自动重试3次:

  

对于Amazon S3存储桶通知和自定义事件,AWS Lambda将会   尝试执行您的功能三次   代码中的错误条件或超出服务或资源的情况   限制。

如果您的处理失败并且您希望更多地控制重试,则可以使用SQS来接收S3事件。这样,您的应用程序就能够从队列中读取消息,如果处理失败/死亡,最终将达到可见性超时,并且可以再次处理SQS消息。这样,您可以无限期地重试,并控制连续重试之间的可见性超时时间。

如果您正在使用Lambda并希望组合使用SQS,则仍可以通过将Lambda函数安排为每5分钟运行一次并让Lambda函数从队列中读取消息来实现。将此与Lambda函数运行时的5分钟限制相结合,您几乎可以连续消耗SQS队列中的消息。

答案 2 :(得分:1)

此处未提及的一种方法是您可以“触摸”S3对象的元数据,它将触发事件。这样您就可以获得事件消息,而无需修改或摆弄原始对象数据。

注意:元数据字段中的数据不必更改即可触发事件。

这里有一些策略:

  • 使用可用于触发事件的公共元数据标记
  • 首先获取元数据字典,然后使用相同的数据将其发回