首页 > 解决方案 > aws lambda 超时执行海王星查询

问题描述

我对 AWS Neptune 和 gremlin 非常陌生,并试图让我的 lambda 函数运行一个简单的查询,但它们挂起并且 lambda 函数在我得到响应之前超时。我根据 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 result;
  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
}

有谁知道我可能做错了什么?

标签: node.jsamazon-web-servicesaws-lambdagremlinamazon-neptune

解决方案


我的问题是我需要将 lambda 函数添​​加到与我的数据库相同的 VPC


推荐阅读