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

Accessing Lambda context object in other files

本文关键字:Lambda 上下文 对象 其他 文件 访问      更新时间:2023-09-26

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

我也有一个config.js文件处理各种设置和模块。导出一个配置对象。其他几个文件都需要这个配置文件,这些文件都需要访问这些设置(默认值,db设置等)。我不一定需要在index.js中使用它。

但是,我需要根据Lambda函数的别名(例如要使用的DynamoDB表后缀)在配置模块内设置一些设置。虽然在导出中通过context.invokedFunctionArn(在我的例子中是PROD或STAGE)获得别名没有问题。处理程序,我没有访问它在我的配置文件(这是需要在所有的地方)。

在我的配置模块中使上下文对象可用的最佳方法是什么,以及我如何在不遇到循环依赖的情况下做到这一点(因为它是在导出之前需要的)。处理程序已完成)?

里面的出口。处理来自多个文件的大量异步代码,这些文件都需要执行配置。它们都需要知道哪个别名正在运行。

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

谢谢!

只需在调用异步函数之前在处理程序的顶部设置变量:

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

我会修改你的async函数来接受一个"environment"参数。然后在处理程序中,检查调用的ARN并提取别名,然后将其映射到受支持的环境类型。将该环境作为参数传递到函数中。

这将您的其他库与lambda调用的任何知识解耦,并且使独立测试更容易。Lambda处理程序可以知道它的别名类型及其含义。实际执行DynamoDB逻辑的代码不需要关心这些—它只需要知道它应该连接到哪里。