下面是有关对象创建的事件通知的示例:
s3EventObjectCreated:
handler: src/handlers/postProcess
events:
- s3:
bucket: 'bucketName'
event: s3:ObjectCreated:*
rules:
- prefix: 'files/'
existing: true
如何在预签名URL到期时创建事件通知?
因此,如果预签名URL过期,它将触发一个事件并调用我的lambda函数。
答案 0 :(得分:3)
预先签名的URL在客户端生成,而不涉及Amazon S3。生成预签名URL时,提供的凭据用于创建在一定时间内有效的签名。此签名可用于稍后发出请求。在发出实际请求时,AWS会检查签名是否使用授权的凭证进行,以及签名是否仍然有效。
由于签名是在客户端生成的,因此一旦过期,您将无法让AWS触发任何事情。
要在预签名URL过期时触发操作,您需要一些其他逻辑。例如,您可以确保将每个预签名URL的项目存储在DynamoDB中,并使用DynamoDB's TTL feature触发基于DynamoDB流事件的Lambda函数,该事件是由于从DynamoDB中删除了该项目而导致的。签名的URL到期。
答案 1 :(得分:1)
不能。根据{{3}},AWS S3仅发布以下事件的通知:
似乎您希望您的Lambda在S3预签名的URL到期时执行。有一个解决方法。我敢打赌,您的S3网址必须具有预先配置的到期时间。
如果到期时间小于或等于15分钟,则可以使用SQS延迟队列。每当您生成S3 URL时,您都将延迟expiry_time
将消息推送到SQS,并且当该消息在该延迟时间之后在SQS中可见时,它将触发您的Lambda。
如果到期时间超过15分钟,则可以查看AWS S3 Notifications Doc的选项。或者,您可以使用running lambda on a schedule编写自己的调度程序,并在作业执行时触发lambda。
答案 2 :(得分:-3)
如果要在预签名的URL过期时触发事件,例如,如果有人尝试使用过期的签名URL来从S3存储桶中获取对象,则有几种方法。
反应方式:(首选)
使用过期的URL时,AWS S3会生成错误4XX或5XX,您可以使用cloudtrail /服务器访问日志来确定错误是由于过期的SifnedURL造成的,您可以配置Lambda函数,只要过期的SignedURL为使用。
主动方式:
如其他答案中所述,您需要配置机制以跟踪SignedURL生成和到期之间的时间。但是,如果您生成数百万个SIgnedURL,那么前摄性方法将具有可伸缩性问题。
希望这会有所帮助, 谢谢