node.js - AWS Lambda 动态数据库切换 Singelton(节点)
问题描述
我试图通过将代码保留在处理程序之外来利用 Lambda 中的数据库连接重用。
例如 - 类似:
import dbconnection from './connection'
const handler(event, context, callback){
//use dbconnection
}
问题是我不决定要连接到哪个数据库,直到我进行查找以查看它们应该连接的位置。在我的具体情况下,我在查询参数中有'customer=foo'然后我可以查看 foo 应该连接到database1。
所以我需要做的是这样的:
const dbconnection = require('./connection)('database1')
现在的方式我需要在每个昂贵的处理程序方法中执行此操作。
有什么方法可以提取查询参数,查找我的数据库并在 Lambda 执行上下文中全局设置/切换它?
我试过这个:
import dbconnection from './connection'
const handler(event, context, callback){
const client = dbconnection.setDatabase('database1')
}
....
./connection.js
setDatabase(database) {
if(this.currentDatabase !== database) {
// connect to different database
this.currentDatabase = database;
}
}
一切都在本地sls offline
工作,但不能通过 AWS Lambda 执行上下文工作。想法?
解决方案
您可以对其进行硬编码(或通过环境变量提供),也可以不进行。如果可以,则将其从 then 处理程序中拉出,并且不会每次都执行。如果您不能,正如您所提到的,那么您要做的就是使 lambda 有状态。Lambda 被设计为无状态的,AWS 有意不公开有关底层容器的特定信息,这样您就不会开始做您现在正在尝试做的事情——向它引入状态。
推荐阅读
- vba - NOT的奇怪行为
- python - Pythonic way to get the max difference between any 2 consecutive elements of a list
- java - 文档显示在单独的布局中,而不是显示在一个布局中?
- docker - 入口路由不适用于使用 helm 部署的服务
- android-ndk - 将地址清理程序与 android NDK 一起使用时的链接问题
- amazon-web-services - 如何编写 IAM 策略,根据标签授予对特定服务的完全访问权限?
- oracle-adf - ADF ComboBox 组件是否可以输入给定 LOV 中不存在的值?
- python-3.x - Unable to get values from a GET request
- node.js - 如何托管节点服务器
- noclassdeffounderror - Spring Webmvc NoClassDefFoundError for class 'ModelAndViewDefiningException'