AWS Lambda Dynamic DB Switching Сингелтон (узел) - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь воспользоваться преимуществом повторного использования db-соединения в 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 голосов
/ 07 февраля 2019

Вы можете либо жестко закодировать (или предоставить его через переменную окружения), либо нет.Если вы можете, то вытяните его из обработчика, и он не будет выполняться каждый раз.Если вы не можете, как вы уже упоминали, то вы пытаетесь сделать лямбда-оператор состоянием.Lambda была разработана так, чтобы не иметь состояния, и AWS преднамеренно не предоставляет конкретную информацию о нижележащих контейнерах, чтобы вы не начинали делать что-то вроде того, что вы пытаетесь сделать сейчас - вводить в него состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...