AWS Lambda动态数据库交换Singelton(节点)

时间:2019-02-06 21:36:56

标签: node.js amazon-web-services aws-lambda singleton

我试图通过将代码保留在处理程序之外来利用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执行上下文。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以对它进行硬编码(或通过环境变量提供)。如果可以,则将其从处理程序中拉出,并且不会每次都执行。如前所述,如果您做不到,那么您想要做的就是使Lambda成为有状态的。 Lambda被设计为无状态的,AWS有意不公开有关基础容器的特定信息,因此您不会像现在尝试做的那样开始做某事-向它引入状态。