访问其他文件中的 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 逻辑的代码不需要关心这个 - 它只想知道它应该连接到哪里。
我有一个包含多个文件的 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 逻辑的代码不需要关心这个 - 它只想知道它应该连接到哪里。