在其他文件中访问Lambda上下文对象

我有一个包含多个文件的NodeJS AWS Lambda函数。 在index.js中,我执行常规exports.handler = function (event,context) {…}

我也有一个config.js文件,它处理各种设置和module.exportsconfiguration对象。 这个configuration文件是需要在其他几个文件,都需要访问这些设置(默认值,数据库设置等)。 我不一定需要在index.js中使用它。

不过,我需要根据Lambda函数的别名(例如使用哪个DynamoDB表后缀)在config模块中设置一些设置。 虽然在exports.handler中通过context.invokedFunctionArn (在我的例子中是PROD或STAGE)取得别名是没有问题的,但是在我的configuration文件(这是遍布全球的地方)中没有访问它的地方。

什么是最好的方式,使我的configuration模块中的上下文对象可用,我将如何做到这一点,而不会运行到循环依赖(因为它需要之前exports.handler完成)?

内部exports.handler从多个文件的所有需要​​configuration的asynchronous代码被执行。 他们都需要知道哪个别名正在运行。

问题不在于如何使用别名,而在于如何使其他文件中的上下文对象可用。

谢谢!

在调用asynchronous函数之前,只需在处理程序顶部设置variables即可:

 const config = require('./config') const someAsyncFunction = require('./someAsyncFunction') exports.handler = function (event, context) { config.invokedFunctionArn = context.invokedFunctionArn someAsyncFunction().then(context.succeed, context.fail) } 

我会改变你的asynchronousfunction,采取“环境”参数。 然后在您的处理程序中,检查被调用的ARN并提取别名,然后将其映射到受支持的环境types。 将该环境作为parameter passing给您的函数。

这将您的其他库从lambda调用的任何知识中分离出来,使日志中的testing变得更容易。 Lambda处理程序可以知道它的别名types,以及它们的含义。 实际上执行DynamoDB逻辑的代码不需要关心 – 它只是想知道它应该连接到哪里。