node.js - AWS serverless-image-handler v3.x 因 AWS Lambda 执行环境的更改而中断

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

我们使用的是 AWS serverless image handler 的 v3 版本用于我们网站的图像处理。然而,当 AWS released this update ,整个事情都被打破了。遗憾的是,新版本 (v4) 不适用于 Thumbor 样式请求,原因如下:

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

最佳答案

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

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

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

部署 AWS serverless-image-handler 堆栈的 v4 后,您唯一需要更改的是由云形成创建的堆栈的 Lambda“ImageHandlerFunction”。以下是对此进行更新的一些快速提示:

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

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

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

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

  • 你需要先把你的新部署包上传到S3,才能更新ImageHandlerFunction(直接上传太大了)

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

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

关于解决上述问题:

要让它处理子文件夹中的图像,而不仅仅是 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票上添加一些注释。

关于node.js - AWS serverless-image-handler v3.x 因 AWS Lambda 执行环境的更改而中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57178748/

相关文章:

node.js - Mongoose 未连接到本地主机

node.js - nodejs koajs 异步等待未从 db.collection.find 获取值

image - 在不引入插值的情况下在matlab中调整图像大小

matlab - 将图像中的一种颜色更改为另一种颜色

matlab - 如何像matlab一样在opencv中检测角点?

node.js - Mongoose:findOneAndUpdate 不返回更新的文档

angularjs - 如何使用 ionic 框架将应用程序部署到亚马逊? (首选 Elastic Beanstalk )

ruby - 如何将 aws 中的 Gem 与 Ruby 结合使用?

java - Amazon EMR : java. io.IOException:文件已存在:s3n://<bucketname>/output/part-r-00002