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

Accessing Lambda context object in other files

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

我还有一个处理各种设置的 config.js 文件和一个配置对象 module.exports。这个配置文件在其他几个需要访问这些设置(默认值、数据库设置等)的文件中是必需的。我不一定需要在 index.js 本身使用它。

但是,我需要根据Lambda函数的别名在config模块中进行一些设置(例如要使用哪个DynamoDB table 后缀)。虽然在 exports.handler 中通过 context.invokedFunctionArn(在我的例子中是 PROD 或 STAGE)获取别名没有问题,但我无法在我的配置文件中访问它(到处都是必需的) ).

使上下文对象在我的配置模块中可用的最佳方法是什么?如果没有 运行 循环依赖(因为在 exports.handler 完成之前需要它),我将如何做到这一点? ?

内部 exports.handler 来自多个文件的大量异步代码都需要执行配置。他们都需要知道哪个别名是 运行.

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

谢谢!

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

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

我会更改您的异步函数以接收 "environment" 参数。然后在您的处理程序中,检查调用的 ARN 并提取别名,然后将其映射到支持的环境类型。将该环境作为参数传递到您的函数中。

这将您的其他库与 lambda 调用的任何知识分离开来,并且使事情更容易在阳光下进行测试。 Lambda 处理程序可以知道它的别名类型及其含义。实际执行您的 DynamoDB 逻辑的代码不需要关心这个 - 它只想知道它应该连接到哪里。