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 文件吗?请帮我。
借助 Lambda Layers,您现在可以引入多个运行时。
https://github.com/lambci/yumda和https://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)
小智 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)
您可以参考官方文档了解更多详细信息。
| 归档时间: |
|
| 查看次数: |
6499 次 |
| 最近记录: |