AWS Lambda:如何使用必须先在linux中安装的工具?

时间:2015-07-13 16:57:36

标签: amazon-web-services exiftool aws-lambda

我了解AWS Lambda在隔离环境的应用程序层上运行。

在许多情况下,功能需要使用必须首先安装在Linux机器上的第三方工具。例如,媒体处理功能使用exiftool从图像中提取元数据,因此我首先安装exiftool

现在我想将媒体处理代码迁移到AWS Lambda。我的问题是,我如何使用我最初必须在linux上安装的工具?我的代码是用Java编写的,exiftool是必需的。

4 个答案:

答案 0 :(得分:3)

要扩展Daniel的答案,如果你想捆绑exiftool,你可以按照official install instructions的Unix / Linux平台的步骤1和2进行操作。然后,您可以在函数的zip文件中包含exiftoollib。要运行exiftool,您可以执行以下操作:

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

exports.handler = (event, context, callback) => {
  // './exiftool' gave me permission denied errors
  exec('perl exiftool -ver', (error, stdout, stderr) => {
    if (error) {
      callback(`error: ${error}`);
      return;
    }
    callback(null, `stderr: ${stderr} \n stdout: ${stdout}`);
  });
}

答案 1 :(得分:1)

您的Lambda函数执行的所有内容都必须包含在您上传的部署包中。

这意味着如果要运行Java代码,可以引用其他Java库。 (同样,如果要运行Node.js代码,可以引用其他Node库。)

  

无论使用哪种工具,生成的.zip文件都必须具有以下结构:

     
      
  • 根级别的所有已编译的类文件和资源文件。

  •   
  • 运行/ lib目录中的代码所需的所有jar。

  •   

source

或者您可以上传.jar文件。

另一方面,

exiftool是一个Perl命令行程序。我怀疑在你的本地机器上,你从Java代码中解脱出来并运行它。

您无法在AWS Lambda中执行此操作。您需要找到一个提取EXIF信息的Java包(我相信有很多可供选择)并将其包含在您的部署包中。您无法在Lambda上安装软件包。

答案 2 :(得分:1)

https://aws.amazon.com/lambda/faqs/

  

问:AWS Lambda支持哪些语言?

     

AWS Lambda支持用Node.js(JavaScript),Python和Java(兼容Java 8)编写的代码。您的代码可以包含现有库,甚至是原生库。请阅读我们关于使用Node.js,Python和Java的文档。

所以基本上你可以调用本机进程,如果它们是预安装的,但只能从JavaScript和Java作为父进程。

要大致了解安装的内容,请查看安装的软件包:

https://gist.github.com/royingantaginting/4499668

这个列表不会100%准确,为此您需要直接查看AMI图像(ami-e7527ed7)

默认情况下,

exiftool似乎没有安装。我怀疑运行lambda函数的帐户是否有足够的权限在全局安装任何东西,但你总是可以将exiftool与你的Node或Java函数捆绑在一起。

您可能还想查看lambdash(https://github.com/alestic/lambdash),它允许您从远程lamdba实例上的本地命令行运行命令

答案 3 :(得分:0)

现在可以使用AWS Lambda Layers完成此操作。

可以在此处找到有关如何为exiftool专门准备图层的示例:

https://gist.github.com/hughevans/6b8c57839b8194ba910428de4375794a