首页 > 解决方案 > 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 执行上下文工作。想法?

标签: node.jsamazon-web-servicesaws-lambdasingleton

解决方案


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


推荐阅读