【问题标题】:aws lambda timeout doing neptune queryaws lambda 超时执行海王星查询
【发布时间】:2021-10-28 05:58:59
【问题描述】:

我对 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;
      
}

index.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
}

有人知道我做错了什么吗?

【问题讨论】:

  • 您的 Lambda 函数是否有权访问 Neptune VPC?您将 Lambda 超时设置为多少?也许尝试增加一点,看看是否有帮助。
  • 我认为我确实需要授予它访问 VPC 的权限。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多