【发布时间】: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