如何从 AWS Lambda Serverless 执行 .jar 文件?

Dha*_*ani 6 jar amazon-web-services aws-lambda serverless

我试过下面的代码。

var exec = require('child_process').execFile;
  var runCmd = 'java -jar ' + process.env.LAMBDA_TASK_ROOT + '/src/' + 'myjar.jar'

  exec(runCmd,
    function (err, resp) {
      if (err) {
        cb(null, { err: err})

      } else {
        cb(null, { resp: resp})
      }
    )
Run Code Online (Sandbox Code Playgroud)

在这里,我也将我的 jar 文件放在根文件夹和 src 文件夹中。但它给出了我的以下错误。我已经添加了带有代码的 .jar 文件。但是出现以下错误。

"err": {
    "code": "ENOENT",
    "errno": "ENOENT",
    "syscall": "spawn java -jar /var/task/src/myjar.jar",
    "path": "java -jar /var/task/src/myjar.jar",
    "spawnargs": [],
    "cmd": "java -jar /var/task/src/myjar.jar"
}
Run Code Online (Sandbox Code Playgroud)

那么如何,我可以在 AWS Lambda 环境中执行这个 .jar 文件吗?请帮我。

Kos*_*aut 7

借助 Lambda Layers,您现在可以引入多个运行时。

https://github.com/lambci/yumdahttps://github.com/mthenw/awesome-layers都有很多预构建的包,您可以使用它们来创建层,以便您的环境中有第二个可用的运行时。

例如,我目前正在开发一个项目,该项目在基于lammci/yumbda 构建的自定义层之上使用Ruby 2.5 运行时来提供Java。

    mkdir dependencies
    docker run --rm -v "$PWD"/dependencies:/lambda/opt lambci/yumda:1 yum install -y java-1.8.0-openjdk-devel.x86_64
    cd dependencies
    zip -yr ../javaLayer .
Run Code Online (Sandbox Code Playgroud)
  1. 将 javaLayer.zip 作为层上传到 aws lambda
  2. 为您的函数添加图层
  3. 在您的函数中,java 将位于 /opt/lib/jvm/{YOUR_SPECIFIC_JAVA_VERSION}/jre/bin/java


小智 5

AWS Lambda 允许您runtime在创建该 lambda 函数时选择一个,或者稍后您可以再次更改它。 在此输入图像描述

因此,当您使用运行时运行 Lambda 函数时NodeJs,容器将没有Java可用的运行时。

runtime对于 AWS Lambda,一个容器中只能有一种类型。

因此,使用Jar您想要以 Java 运行的文件创建一个单独的 Lambda runtime,然后您可以从当前的NodeJSlambda 函数触发该 lambda 函数(如果这是您最终想要的)。

以下是如何使用调用另一个 Lambda 函数的示例NodeJS

var aws = require('aws-sdk');
var lambda = new aws.Lambda({
  region: 'put_your_region_here'
});

lambda.invoke({
  FunctionName: 'lambda_function_name',
  Payload: JSON.stringify(event, null, 2)
}, function(error, data) {
  if (error) {
    context.done('error', error);
  }
  if(data.Payload){
   context.succeed(data.Payload)
  }
});
Run Code Online (Sandbox Code Playgroud)

您可以参考官方文档了解更多详细信息。