【问题标题】:AWS Lambda function with ImageMagick layer on Nodejs10.x在 Nodejs10.x 上带有 ImageMagick 层的 AWS Lambda 函数
【发布时间】:2019-11-12 22:34:31
【问题描述】:

我一直在尝试创建一个 Lambda 函数,该函数使用 ImageMagick CLI 转换高分辨率图像以卸载我的服务器。我已经部署了imagemagick-aws-lambda-2 并提取了图层并将其添加到我的函数中,但是我没有成功调用 imagemagick CLI。我尝试的所有操作都会得到一个“错误:命令失败:转换:没有这样的文件或目录”。

我尝试过其他层,我尝试下载层并将它们手动添加到函数中,我尝试以不同的方式设置 PATH 变量,但仍然无法让它工作。将其部署到 Lambda 时,我可以看到我的层已正确嵌入到我的函数中。在这一点上,我只想让最基本的用例与“转换”命令一起工作。

我的模板.yaml:

Transform: AWS::Serverless-2016-10-31
Description: >
  wpPoster

  Sample SAM Template for wpPoster

Globals:
  Function:
    Timeout: 60

Resources:
  TestPosterFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: TestPoster
      Description: Test of TestPoster function
      CodeUri: test-poster/
      Handler: index.lambdaHandler
      Runtime: nodejs10.x
      Layers:
        - arn:aws:lambda:eu-west-1:xxxxxxxxxxxxx:layer:image-magick:1

我的 index.js:

const exec = require('child_process').exec;

exports.lambdaHandler = function(event, context, callback) {
    exec('convert -version', function(error, stdout, stderr) {
        if (error) {
            console.log(error);
        }
        console.log(stdout);
    });

    callback();
};

我正在使用 VS Studio Code 和 AWS SAM 进行本地编码和测试,它应该下载和缓存任何外部层。

【问题讨论】:

  • 我对节点、层、处理程序或 aws 一无所知,但想知道您使用的是哪个版本的 ImageMagick?使用 v7,命令从 convert 更改为 magick...
  • @MarkSetchell:该层使用 IM 7.0.8-45。是的,这是真的,但我很确定“转换”在 v7 之后仍然有效?我在本地机器上使用 7.0.8-59 并且“转换”在那里工作正常。
  • 这取决于您在安装时是否在 GUI 中选中/勾选了“使用旧版命令” - 它可能没有在一台机器上选中。
  • 我尝试使用“magick”而不是转换,但不幸的是我得到了同样的错误。

标签: node.js amazon-web-services aws-lambda imagemagick


【解决方案1】:

奇怪,环境路径或图层包似乎有问题。

一个层被复制到“/opt”。在文档中指定需要将二进制文件放入文件夹“bin”并创建一个“zip”存档。因此,执行时二进制文件的路径例如是“/opt/bin/convert”。 “/opt/bin”应该在Node环境路径中。

我建议:

  1. 尝试指定绝对路径“/opt/bin/convert -version”
  2. 如果仍然“没有这样的文件或目录”,则下载该层,在您的计算机上将其解压缩并检查文件夹结构

附:我复制了您的“template.yaml”(将 Resources.TestPosterFunction.Properties.Layers 替换为我的 AWS 账户中的随机层)和“index.js”(称为我的可执行文件,“executable -version”),一切正常完美(“山姆本地调用TestPosterFunction”)。我的示例层包含以下内容:

?bin
 ┣ ?executable

【讨论】:

  • 感谢您的回复@Phil,请查看我的新答案作为评论,因为它不适合这里
猜你喜欢
  • 2023-01-31
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 2022-01-22
  • 2021-04-14
  • 2020-04-04
相关资源
最近更新 更多