【发布时间】:2017-04-11 05:57:57
【问题描述】:
我要做的是捕获任何图像文件请求并检查该图像是否不存在,返回不同的图像。
我正在研究 Lambda 和无服务器框架,但我找不到太多关于此的信息。有没有可能?
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda serverless-framework
我要做的是捕获任何图像文件请求并检查该图像是否不存在,返回不同的图像。
我正在研究 Lambda 和无服务器框架,但我找不到太多关于此的信息。有没有可能?
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda serverless-framework
没有 GetObject 事件。请关注此link 以获取支持的事件列表。 S3 只会在对象因冗余减少而被创建、删除或丢失时通知您(或触发 Lambda 函数)。
因此,不可能完全按照您的意愿行事,但您有几个选择。
使用 Lambda@Edge 拦截您对使用 S3 作为源的 CloudFront 分配的调用。如果请求的文件丢失,此拦截器可以发送另一个文件。这不是一个好的解决方案,因为您会增加操作的延迟和成本。
不要向您的客户端提供 S3 端点,而是提供 API 网关端点。在这种情况下,所有图像请求都将由 Lambda 函数处理,如果请求的文件丢失,则可以提供另一个文件。这不是一个好的解决方案,因为您会增加操作的延迟和成本。
最佳选项,可能有效,但我没有尝试过,是配置 S3 存储桶重定向规则。这是静态网站托管的常见用例,其中找不到页面(状态代码 404)重定向到另一个页面(如 page-not-found.html)。在您的情况下,您可以尝试重定向到默认图像的地址。此解决方案不会使用 Lambda 函数。
【讨论】:
GetObject 事件。
Location: 标头,在 Lambda 中使用正则表达式逻辑以允许比 S3 允许的更灵活的重写......但是 L@ E 只能做有限的内容替换——L@E 环境比普通 Lambda 更严格——没有网络访问、没有临时空间或 AWS SDK。