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

sou*_*976 9 image-processing amazon-web-services node.js aws-lambda aws-serverless

我们正在使用v3版本的AWS无服务器图像处理程序来为我们的站点进行图像处理。但是,当AWS发布此更新时,整个事情就坏了。不幸的是,由于以下原因,新版本(v4)不适用于Thumbor样式请求:

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

sou*_*976 5

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

在此堆栈的新 v4 上对 lambda 图像处理程序函数进行了一定数量的工作后,我现在可以令人满意地处理 Thumbor 样式的请求,而且我不需要更改应用程序请求图像的方式。

请注意,这里的一些修复是有限的,因为我们只使用了 Thumbor 功能的一个子集,所以我们只修复了我们需要的东西。可能您正在使用我们没有使用的选项,这些选项可能还需要额外的或不同的编码才能开始工作。

一旦您部署了 AWS 无服务器图像处理程序堆栈的 v4,您唯一需要更改的是由云形成创建的堆栈的 Lambda 'ImageHandlerFunction'。以下是对此进行更新的一些快速指示:

  • 在Lambda中找到ImageHandlerFunction,进去点击Actions --> Export function --> Download deployment package

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

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

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

  • 您需要将新的部署包上传到S3,然后才能更新ImageHandlerFunction(直接上传太大了)

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

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

关于解决上述问题:

要使其处理子文件夹中的图像,而不仅仅是 S3 存储桶的根目录:请在此处查看我的修复程序- 基本上您需要更改此内容:

    const key = (event["path"]).split("/");
    return key[key.length - 1];
Run Code Online (Sandbox Code Playgroud)

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

要使安全哈希正常工作请在此处查看我的修复程序

获得自动 webp 支持请在此处查看我的修复

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