AWS Serverless-Image-handler v3.x因AWS Lamdba执行环境的更改而中断

时间:2019-07-24 08:42:31

标签: node.js amazon-web-services image-processing aws-lambda aws-serverless

我们将AWS serverless image handler的v3版本用于我们网站的图像处理。但是,当AWS released this update时,整个事情都坏了。不幸的是,由于以下原因,新版本(v4)不适用于Thumbor样式请求:

如何在新版本的AWS无服务器图像处理程序上启动并运行,而不必对我的应用程序进行重大更改(即,我想继续使用Thumbor样式请求,但使用v4的服务器无图像处理程序)?

1 个答案:

答案 0 :(得分:3)

我注意到很多其他人都遇到了同样的问题,所以我希望这些笔记能帮助人们解决他们的问题。

在此堆栈的新v4上对lambda图像处理程序函数进行了一些工作之后,现在我可以使它满意地处理Thumbor样式的请求,而无需更改我的应用程序请求图像的方式。

请注意,由于我们仅使用Thumbor功能的子集,因此此处的某些修复程序受到限制,因此,我们仅修复了所需的功能。可能是您使用的选项不是我们所需要的,这些选项可能还需要其他或不同的编码才能起作用。

部署了第4版AWS无服务器图像处理程序堆栈后,唯一需要更改的是Lambda'ImageHandlerFunction',用于由云形成而创建的堆栈。以下是一些对此进行更新的快速提示:

  • 在Lambda中找到ImageHandlerFunction,进入它并单击“操作->导出功能->下载部署包”

  • 这将下载一个包含图像处理程序所有代码的zip文件。从此zip提取所有文件。

  • 您现在可以开始对代码进行更改。您可以根据需要使用mocha运行单元测试。

  • 对代码进行更改后,您需要使用其中的所有文件创建一个新的zip

  • 您需要先将新的部署程序包上传到S3,然后才能更新ImageHandlerFunction(太大而无法直接上传)

  • 上传到S3上的某个位置后,转到lambda中的ImageHandlerFunction并从代码输入类型中选择s3选项。输入指向S3上zip文件的链接,然后单击页面顶部的“保存”。

  • 您现在可以测试更新的功能。请记住,响应是在Cloudfront上缓存的,因此您可能需要在Cloudfront上创建和失效以对其进行测试,或者使用尚未缓存的新映像。

关于解决上述问题:

要使其与子文件夹中的图像一起使用,而不仅仅是S3存储桶的根: 请参见my fix here-基本上您需要更改此设置:

    const key = (event["path"]).split("/");
    return key[key.length - 1];

我使用的包括单元测试的解决方案在上面的github注释中。您可能需要稍有不同的解决方案。

使安全哈希有效,请see my fix here

获得自动的Webp支持,请see my fix here

关于修复Thumbor和json图像请求之间的映射,这需要一些小的更改,但实际上并不是什么大问题。最好是根据您自己的需求执行此操作,因为我的修复非常针对我的用法。我将尝试在相关的github票证中添加一些注释。