使用Lambda Edge(使用Cloudfront触发器)可以快速调整图像大小

时间:2017-10-16 10:11:12

标签: amazon-web-services aws-lambda amazon-cloudfront

我刚刚完成此操作,会根据请求调整存储在s3上的图片的大小,并且它可以作为魅力:https://aws.amazon.com/tw/blogs/compute/resize-images-on-the-fly-with-amazon-s3-aws-lambda-and-amazon-api-gateway/

我刚刚开始阅读Lambda Edge的文章:http://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html

但我仍然不确定我应该如何处理事件:查看者请求,原始请求,原始响应和查看者响应。

我现在使用的带有网关触发器的lambda函数是https://github.com/awslabs/serverless-image-resizing

3 个答案:

答案 0 :(得分:1)

Lambda @ Edge目前还不适合图像大小调整。它适用于更轻量级的任务,例如标题操作和基于文本的小型响应生成。

在Lambda @ Edge中,部署zip文件限制为1 MiB,容器内存限制为128 MiB,查看器端的运行时间限制为1秒,原始端限制为3秒,尽管可用CPU容量未明确公布,它是1个现代2.3-2.4 GHz Xeon核心容量的一小部分。它对于亚毫秒标题重写是足够的,但不是图像大小调整。

现在Lambda @ Edge能够检查查询字符串,可以想象你可以使用它而不是API网关来调用实际调整大小的第二个Lambda函数(从Lambda调用Lambda)然后将API网关格式的响应转换为CloudFront格式,因此每次调用的成本可能会更低(因为Lambda @ Edge请求的成本低于API网关请求)...但它不是直接替代API Gateway + Lambda在已建立的示例中正在执行的操作。您可以使用Origin Request触发器执行此操作。

Lambda @ Edge也无法返回生成的二进制内容(仅限UTF-8字符内容),但这与实现的调整大小示例没有直接关系,因为重定向用于将浏览器发送到新目标对象

它非常有用,但不完全等同于API Gateway + Lambda。

答案 1 :(得分:1)

截至2017年12月,AWS Lambda Limits的内存分配最大值为3008 MB,每个请求的最长执行时间为300秒。实际上Step 2.1: Create a Deployment Package甚至使用了图像大小调整的例子。

AWS Lambda@Edge对事件有最好的描述,包括图表。我想您想使用Origin Request事件,因此可以缓存您的响应。另外,请查看AWS re:invent 2017: Building Serverless Websites with Lambda@Edge (CTD309) - YouTube 以获取完整说明。

答案 2 :(得分:0)

现在,Lambda @ edge已经支持数十MB的zip软件包。因此,我们可以将Sharp库打包到其中,以支持我们对图像的常规处理。

我写了一个最佳实践。 https://github.com/foamzou/aws-lambda-edge-image-process

使用它,用户只需要添加一些参数即可获取处理后的图片。例如,将jpg图片转换为宽度为500px,质量为50%的webp图片:https://your-cdn/image.jpg@500w_50q.webp