Serverless/Lambda + S3:是否可以捕获 'GetObject' 事件和 select 不同的资源?

Serverless/Lambda + S3: Is it possible to catch a 'GetObject' event and select a different resource?

我想做的是捕获任何图像文件请求并检查该图像是否不存在,return 不同的图像。

我正在查看 Lambda 和无服务器框架,但找不到太多相关信息。有可能吗?

没有 GetObject 事件。请按照此 link 获取支持的事件列表。 S3 只会在创建、删除或因冗余减少而丢失对象时通知您(或触发 Lambda 函数)。

所以,不可能完全按照您的意愿去做,但您有一些选择。

备选方案

  1. 使用 Lambda@Edge 拦截您对使用 S3 作为源的 CloudFront 分配的调用。如果请求的文件丢失,此拦截器可以发送另一个文件。这不是一个好的解决方案,因为您会增加操作的延迟和成本。

  2. 不是向您的客户端提供 S3 端点,而是提供 API 网关端点。在这种情况下,所有图像请求都将由 Lambda 函数处理,如果请求的文件丢失,则有可能提供另一个文件。这不是一个好的解决方案,因为您会增加操作的延迟和成本。

  3. 最佳选择,可能有效,但我没有尝试过,是配置 S3 存储桶重定向规则。这是静态网站托管的常见用例,其中找不到页面(状态代码 404)重定向到另一个页面(如 page-not-found.html)。在您的情况下,您可以尝试重定向到默认图像的地址。此解决方案不会使用 Lambda 函数。