触发S3创建事件

lon*_*ony 15 events amazon-s3

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

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

我使用Python和boto3.

Sco*_*all 15

今天我遇到了类似的情况,我需要在文件已经在S3之后重新触发Lamda函数.我的一位同事想出了以下哪些对我们有用:

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

    aws lambda invoke
        --function-name <lambda function name>
        --payload '{
            "Records":[{
                "s3":{
                    "bucket":{
                        "name":"<bucket name>"
                    },
                    "object":{
                        "key": "<key name>"
                    }
                }
            }]
        }' outfile
    
    Run Code Online (Sandbox Code Playgroud)


Jar*_*eld 7

如果不再次上传文件,则无法再次启用S3事件触发器.但是,对于失败的处理事件,如果您使用Lambda,它将根据常见问题解答自动重试3次:

对于Amazon S3存储桶通知和自定义事件,如果代码中出现错误情况或超出服务或资源限制,AWS Lambda将尝试三次执行您的函数.

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

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


Jam*_*and 7

这里没有提到的一种方法是,您可以“触摸”S3 对象的元数据,它将触发一个事件。这样您就可以获取事件消息,而无需修改或摆弄原始对象数据。

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

这里有一些策略:

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