Amazon web services AWS Lambda不与gm模块一起工作
我正在使用node js将我的图像调整为不同大小的变体,当图像被放入中时 它一直工作到昨天。今天,当我使用相同的lambda函数时,出现以下错误:Amazon web services AWS Lambda不与gm模块一起工作,amazon-web-services,amazon-s3,imagemagick,aws-lambda,gm,Amazon Web Services,Amazon S3,Imagemagick,Aws Lambda,Gm,我正在使用node js将我的图像调整为不同大小的变体,当图像被放入中时 它一直工作到昨天。今天,当我使用相同的lambda函数时,出现以下错误: { "errorMessage": "Command failed: identify: not authorized `//bucketname.s3.amazonaws.com/imagename.jpg' @ error/constitute.c/ReadImage/454.\n", "errorType": "Error", "stackTr
{
"errorMessage": "Command failed: identify: not authorized `//bucketname.s3.amazonaws.com/imagename.jpg' @ error/constitute.c/ReadImage/454.\n",
"errorType": "Error",
"stackTrace": [
"",
"ChildProcess.proc.on.onExit (/var/task/node_modules/gm/lib/command.js:297:17)",
"emitTwo (events.js:87:13)",
"ChildProcess.emit (events.js:172:7)",
"maybeClose (internal/child_process.js:821:16)",
"Socket.<anonymous> (internal/child_process.js:319:11)",
"emitOne (events.js:77:13)",
"Socket.emit (events.js:169:7)",
"Pipe._onclose (net.js:469:12)"
]
}
有人能帮忙调试这个问题吗?在过去的3个小时里,我一直在关注这个问题。我的AWS Lambda在东京地区 您的Lambda函数似乎无法访问S3存储桶。确保您的职能部门应用了相应的IAM策略,例如:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::*"
]
}]
}
尽管您的问题与graphicsmagick无关,但请注意AWS Lambda仅随imagemagick一起安装。因此,除非您自己提供graphicsmagick可执行文件,否则请确保使用imagemagic子类:
var gm = require("gm").subClass({ imageMagick: true });
在一个过去5周一直完美运行的进程上,出现了完全相同的错误消息。在今天与AWS支持人员交谈后,我得知,由于最近在此处发现的漏洞,针对Imagemagick的本机库支持已从AWS Lambda中删除 我被告知必须在我自己版本的本机库中重建Lambda函数和包- 支持代表确认,尚未公开宣布这一变化
TLDR:如果从2016年4月5日起,您一直在使用依赖于Imagemagick捆绑版本的AWS Lambda函数,则该函数现在已损坏,在您使用自己构建和维护的库版本重新部署之前可能无法工作。愿第四个与你同在……米奇·希尔兹是正确的,你现在必须自己在AWS Lambda上构建/部署它 我已经构建了一个适用于我的项目的版本,以及一个可以下载到lambda实例的NodeJS工具。构建的tarbal约为85mb,太大,无法与代码打包,因此您必须在运行之前将其下载到lambda上。它存储在
/tmp/imagemagick
中,lambda尝试缓存/tmp/
文件夹,因此您不必每次运行时都下载它
GitHub页面:
根据AWS文档检查构建ImageMagick的tarbal版本:AWS Lambda仍然支持ImageMagick 然而,几天前我遇到了同样的问题,一个工作完美的项目。当错误消息发出时,在尝试读取S3存储桶时,似乎是权限冲突,而不是imagemagick问题 您可以尝试更改Bucket权限 或者,作为一种解决方法,您可以始终使用lambda文件压缩图像文件,并避免此类权限冲突 注意:此更新包含一个更新的/etc/ImageMagick/policy.xml文件,该文件禁用临时、HTTPS、HTTP、URL、FTP、MVG、MSL、文本和标签编码器
我把电话从
gm(我的url)
改为gm(请求(我的url))
,事情似乎又开始运转了。也就是说,我从request()调用向ImageMagick发送一个流,而不是让ImageMagick尝试下载图像(这在ImageMagick的policy.xml中是禁用的,我无法修改该文件).从简单地读取错误消息来看,Lambda函数似乎不再具有对S3存储桶的访问权限。您是否有与Lambda兼容的版本的源代码?不必自己创建一个会很好。
var gm = require("gm").subClass({ imageMagick: true });