根据docs的默认环境变量:
NODE_PATH:/opt/nodejs/node8/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules
我想在其中添加我的自定义目录(不要覆盖所有内容)
NODE_PATH:$NODE_PATH:/opt/nodejs/mycustom-directory
我从lambda控制台尝试了上述操作,它覆盖了所有操作。 $NODE_PATH
作为字符串添加。它没有解析$NODE_PATH
打印环境时得到的输出:
NODE_PATH=$NODE_PATH:/opt/nodejs/mycustom-directory
类似的问题,但仍然没有解决方案:AWS lambda add PATH variable?
答案 0 :(得分:0)
我想到了同样的问题。 我编写了一个代码,以检查lambda函数是否应用了shell变量扩展,并弄清楚了它们不适用。
我将环境变量 [error] a.a.ActorSystemImpl - Internal server error, sending 500 response
akka.http.impl.util.One2OneBidiFlow$OutputTruncationException: Inner flow was completed without producing result elements for 1 outstanding elements
at akka.http.impl.util.One2OneBidiFlow$OutputTruncationException$.apply(One2OneBidiFlow.scala:22)
at akka.http.impl.util.One2OneBidiFlow$OutputTruncationException$.apply(One2OneBidiFlow.scala:22)
at akka.http.impl.util.One2OneBidiFlow$One2OneBidi$$anon$1$$anon$4.onUpstreamFinish(One2OneBidiFlow.scala:97)
at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:504)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:378)
at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:588)
at akka.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:472)
at akka.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorGraphInterpreter.scala:563)
at akka.stream.impl.fusing.ActorGraphInterpreter.akka$stream$impl$fusing$ActorGraphInterpreter$$processEvent(ActorGraphInterpreter.scala:745)
at akka.stream.impl.fusing.ActorGraphInterpreter$$anonfun$receive$1.applyOrElse(ActorGraphInterpreter.scala:760)
[error] (Compile / playEbeanModels) java.lang.NoClassDefFoundError: play/Configuration
设置为FOO
,
然后,运行检查代码(在lambda函数中):
$NODE_PATH
输出为:
const { FOO } = process.env;
exports.lambdaHandler = async (event, context, callback) => {
console.log(FOO);
};
我只是将整个2019-02-22T08:29:05.714Z cde21239-628f-4a79-b046-6a14f177f59e $NODE_PATH
改写为NODE_PATH
(my custom library path):/opt/nodejs/lib:/opt/nodejs/node8/node_modules/:/opt/nodejs/node_modules:/var/runtime/node_modules
的默认值在此处说明:
https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
答案 1 :(得分:0)
我也需要这样做,因为我使用的是AWS Lambda图层,这些图层位于默认的NODE_PATH
上,并且还希望能够使用本地根来避免较长的相对路径(例如{{1} }而不是import bar from foo/bar
,但我没有找到追加到import bar from ../../../../foo/bar
的任何方法而不会丢失默认值-设置好后,{{1 }}-包括NODE_PATH
模块在内。
我能想到的唯一解决方案是:
将node_modules
显式设置为默认值加上您的自定义值(这对lambda内部环境配置增加了丑陋的依赖,您不必在意)
将您的自定义库放在一个图层中。在很多情况下,如果可以将子模块提取为单独的层,则这是一个很好的解决方案(但对于像我上面所述的消除应用程序内部较长的相对路径的情况,这种方法无济于事。)
通过程序的附加操作,使应用程序的第一行执行
aws-sdk
这可能不是最漂亮的黑客工具,但应该可以解决问题(免责声明:尚未在AWS Lambda环境中实际尝试过此操作,但至少在本地使用Node 12可以工作。)