Events 触发S3创建事件

Events 触发S3创建事件,events,amazon-s3,Events,Amazon S3,我使用S3创建事件来触发AWS Lambdas。如果我的处理失败,我想做一些魔术,然后再次触发“事件”,开始我的处理。到目前为止,我看到的唯一方法是重新上传文件 我可以在不重新上传文件的情况下“再次”触发事件吗 我使用Python和boto3。如果不再次上传文件,就不可能再次触发S3事件。但是,对于处理失败的事件,如果您正在使用Lambda,则将根据以下步骤自动重试3次: 对于AmazonS3 bucket通知和自定义事件,AWS Lambda将 在发生故障时,尝试执行函数三次 代码中的错误条件

我使用S3创建事件来触发AWS Lambdas。如果我的处理失败,我想做一些魔术,然后再次触发“事件”,开始我的处理。到目前为止,我看到的唯一方法是重新上传文件

我可以在不重新上传文件的情况下“再次”触发事件吗


我使用Python和boto3。

如果不再次上传文件,就不可能再次触发S3事件。但是,对于处理失败的事件,如果您正在使用Lambda,则将根据以下步骤自动重试3次:

对于AmazonS3 bucket通知和自定义事件,AWS Lambda将 在发生故障时,尝试执行函数三次 代码中的错误条件或超出服务或资源 限制

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


如果您正在使用Lambda并希望结合使用SQS,那么仍然可以通过安排Lambda函数每5分钟运行一次,并让Lambda函数从队列中读取消息来实现这一点。结合Lambda函数运行时间的5分钟限制,您几乎可以连续使用SQS队列中的消息。

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

  • 安装
  • 执行这样的操作:

    aws lambda invoke
        --function-name <lambda function name>
        --payload '{
            "Records":[{
                "s3":{
                    "bucket":{
                        "name":"<bucket name>"
                    },
                    "object":{
                        "key": "<key name>"
                    }
                }
            }]
        }' outfile
    
    aws lambda调用
    --函数名
    --有效载荷'{
    “记录”:[{
    “s3”:{
    “桶”:{
    “名称”:”
    },
    “对象”:{
    “密钥”:”
    }
    }
    }]
    }“外文文件
    

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

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

    以下是一些策略:

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

    如果我重新加载文件,谢谢。我如何“维持”元数据?将文件移动到另一个bucket进行“reupload”是否足够?它是否也是“手动”创建事件并调用Lambda的一个选项?谢谢,我查看了它。