время ожидания aws lambda при выполнении запроса neptune

#node.js #amazon-web-services #aws-lambda #gremlin #amazon-neptune

Вопрос:

Я очень новичок в AWS Neptune и gremlin и пытаюсь заставить свою лямбда-функцию выполнить простой запрос, но они зависают, и время ожидания лямбда-функции истекает, прежде чем я получу ответ. Я настроил подключение в соответствии с документами AWS, но мне было сложно получить какие-либо запросы для выполнения и возврата данных. У меня есть экземпляр EC2, который я могу подключить к базе данных через консоль gremlin и могу нормально выполнять запросы там, у меня проблемы только с их запуском в моей функции lambda.

подключение.ts

 const gremlin = require('gremlin');
const {getUrlAndHeaders} = require('gremlin-aws-sigv4/lib/utils');
const traversal = gremlin.process.AnonymousTraversalSource.traversal;
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;

let conn = null;
let g = null;

export function connection(){
    const getConnectionDetails = () => {
        if (process.env['USE_IAM'] == 'true'){
           return getUrlAndHeaders(
               process.env['NEPTUNE_ENDPOINT'],
               process.env['NEPTUNE_PORT'],
               {},
               '/gremlin',
               'wss'); 
        } else {
            const database_url = 'wss://'    "my database endpoing"   ':'   "8182"   '/gremlin';
            return { url: database_url, headers: {}};
        }      
      };

      const createRemoteConnection = () => {
        const { url, headers } = getConnectionDetails();
        
        const c = new DriverRemoteConnection(
            url, 
            { 
                mimeType: 'application/vnd.gremlin-v2.0 json', 
                headers: headers 
            });  
    
         c._client._connection.on('close', (code, message) => {
                 console.info(`close - ${code} ${message}`);
                 if (code == 1006){
                     console.error('Connection closed prematurely');
                     throw new Error('Connection closed prematurely');
                 }
             });  
        
         return c;       
      };
    
      const createGraphTraversalSource = (conn) => {
        return traversal().withRemote(conn);
      };
    
      if (conn == null){
        console.info("Initializing connection")
        conn = createRemoteConnection();
        g = createGraphTraversalSource(conn);
      }

      return g;
      
}
 

индекс.ts

 import {connection} from "./connection"
export async function handler(event, context): Promise<any> {

  const g = connection()
  let resu<
  console.log("before query") // this gets called
  const user =  await g.V('1').values("name").next(); // hangs here
  console.log("after query")  //This never gets executed
  return user
}
 

Кто-нибудь знает, что я могу делать не так?

Комментарии:

1. Имеет ли ваша функция Lambda доступ к VPC Neptune? На что у вас установлен тайм-аут Лямбды? Возможно, попробуйте немного увеличить его, просто чтобы посмотреть, поможет ли это вообще.

2. Я думаю, что мне действительно нужно было предоставить ему доступ к VPC.

Ответ №1:

Моя проблема заключалась в том, что мне нужно было добавить лямбда-функцию в тот же VPC, что и в моей базе данных