带有JDK包的java AWS NodeJS lambda函数
AWS NodeJS lambda函数和JDK包
我正在尝试将数据库驱动程序(Sybase驱动程序)与AWS NodeJS lambda一起使用。 这个驱动程序使用JConnect,JConnect在运行时需要JDK。 但似乎AWS Lambda for NodeJS并没有随Java运行时提供。它正在失败,出现以下错误
{
"errorType": "Error",
"errorMessage": "spawn java ENOENT",
"code": "ENOENT",
"errno": -2,
"syscall": "spawn java",
"path": "java",
"spawnargs": [
"-jar",
"/var/task/node_modules/sybase-fork/JavaSybaseLink/dist/JavaSybaseLink.jar",
// othe args
],
"stack": [
"Error: spawn java ENOENT",
" at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)",
" at onErrorNT (internal/child_process.js:467:16)",
" at processTicksAndRejections (internal/process/task_queues.js:82:21)"
]
}
有人试过从AWS Lambda中的节点派生java进程吗
# 1 楼答案
AWS Lambda运行时应该是高性能、低延迟和最小的。这就是为什么他们在Firecracker MicroVM上用OSv micro kernel运行的原因。将数百兆字节未使用的运行时打包到它们中会适得其反
这意味着提供的NodeJS运行时将不包含任何Java、Python等,如果您需要其中任何一种,这显然是次优的
目前,您最好使用Docker映像创建自己的自定义运行时强>
您可以在此处找到相关的AWS文档:
https://docs.aws.amazon.com/lambda/latest/dg/images-create.html
您可以从official NodeJS docker image开始,然后安装所需的Java版本以及可能需要的任何其他依赖项
个人提示:如果此Lambda位于应用程序的关键路径上(例如,用户在web应用程序中等待响应),则应确保映像尽可能小,以减少冷启动时间。这是进一步恶化的事实,您正试图用Java做一些事情,这可能是AWS Lambda世界上最糟糕的冷启动时间。如果可能的话,我会寻找其他选项,比如使用Go和official Sybase (ASE) driver