AWS无服务器图像处理程序v3.x由于AWS Lambda执行环境的更改而出现故障。

10
我们的网站使用AWS无服务器图像处理程序的v3版本进行图像处理。然而,当AWS发布了此更新时,整个程序都崩溃了。不幸的是,新版本(v4)由于以下原因与Thumbor样式请求不兼容:

如何在不必对我的应用程序进行重大更改的情况下(即,我想继续使用Thumbor样式请求,但使用serverless-image-handler的v4版本),使用AWS serverless-image-handler的新版本?


我已经fork了旧版本并使其能够兼容新环境。请查看: https://github.com/awslabs/serverless-image-handler/issues/127#issuecomment-514819222 - user11833143
1个回答

5
我注意到有很多人遇到了与此类似的问题,所以我希望这些笔记可以帮助人们解决问题。
在新的v4堆栈上,通过对lambda图像处理程序函数进行一定量的工作,我现在已经成功地使用Thumbor风格请求,并且我不需要更改应用程序请求图像的方式。
请注意,这里的某些修复措施是有限的,因为我们仅使用Thumbor功能的子集,因此我们只修复了我们需要的部分。您可能正在使用我们没有使用的选项,这也可能需要额外或不同的编码才能正常工作。
一旦您部署了AWS无服务器图像处理程序堆栈的v4版本,您唯一需要更改的就是由cloud formation创建的堆栈的Lambda“ImageHandlerFunction”。以下是更新此内容的一些快速指南:
  • 找到Lambda中的ImageHandlerFunction,进入并点击操作 --> 导出函数 --> 下载部署包

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

  • 现在您可以开始更改代码。如果需要,可以使用mocha运行单元测试。

  • 一旦您对代码进行了更改,就需要创建一个包含所有文件的新zip文件

  • 在更新ImageHandlerFunction之前,您需要将新的部署包上传到S3(它太大了,无法直接上传)

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

  • 现在可以测试更新后的功能。请记住,响应被缓存在CloudFront上,因此您可能需要在CloudFront上创建失效,或使用尚未缓存的新图像来测试它。

关于解决上述问题:

要使其与子文件夹中的图像一起工作,而不仅仅是S3桶的根目录: 请参见我的修复方法 - 基本上你需要更改这个:
    const key = (event["path"]).split("/");
    return key[key.length - 1];

我使用的解决方案包括单元测试,可以在上面的github评论中找到。您可能需要稍微不同的解决方案。
要使安全哈希正常工作,请查看我的修复方法
要使自动webp支持正常工作,请查看我的修复方法
关于修复Thumbor和json图像请求之间的映射,这需要进行一些小的更改,但并不是非常重要的事情。最好根据您自己的需求进行操作,因为我的修复方法相当特定于我的使用情况。我将尝试向相关的github问题添加一些注释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接