You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda执行Neptune查询超时,EC2可正常访问该如何排查?

故障排查与解决方案
  • 网络配置校验
    首先确认Lambda已部署在与Neptune集群相同的VPC下,且关联的安全组已开放出站到Neptune集群8182端口的规则;同时Neptune集群的安全组需开放允许Lambda安全组访问8182端口的入站规则。
    另外确认Lambda部署的子网与Neptune子网路由可达,无网络ACL拦截8182端口流量。
  • IAM权限校验
    若环境变量USE_IAM设为true,需给Lambda执行角色添加neptune-db:connect权限,资源配置为你的Neptune集群ARN,示例权限如下:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": "neptune-db:connect",
                "Resource": "arn:aws:neptune-db:<区域>:<账号ID>:<集群资源ID>/*",
                "Effect": "Allow"
            }
        ]
    }
    
  • 代码错误修正
    你当前代码getConnectionDetails的else分支中硬编码了my database endpoing(存在拼写错误,应为endpoint),若USE_IAM为false需替换为实际的Neptune端点,不要保留测试值。
  • 连接初始化逻辑修正
    这是最可能导致请求挂起的核心原因:DriverRemoteConnection建立WebSocket连接是异步过程,你当前的同步初始化逻辑在首次调用时,连接还未完成握手就直接返回了遍历源g,导致查询无响应。
    需要将连接初始化逻辑改为异步,等待连接就绪后再返回,示例修正代码:
    // connection.ts 修改部分
    let conn = null;
    let g = null;
    
    export async function connection(){
        // 原有getConnectionDetails、createRemoteConnection、createGraphTraversalSource逻辑保持不变
        if (conn == null){
            console.info("Initializing connection")
            conn = createRemoteConnection();
            // 新增等待连接就绪逻辑
            await conn.connect();
            g = createGraphTraversalSource(conn);
        }
        return g;
    }
    
    对应修改index.ts的调用逻辑:
    import {connection} from "./connection"
    export async function handler(event, context): Promise<any> {
      const g = await connection()
      console.log("before query")
      const user =  await g.V('1').values("name").next();
      console.log("after query")
      return user
    }
    
  • 额外配置优化
    可在创建DriverRemoteConnection时添加超时、心跳配置,避免无限制挂起:
    const c = new DriverRemoteConnection(
        url, 
        { 
            mimeType: 'application/vnd.gremlin-v2.0+json', 
            headers: headers,
            connectTimeout: 10000, // 连接超时10秒
            pingInterval: 60000 // 心跳间隔60秒
        });
    
    也可在handler开头添加context.callbackWaitsForEmptyEventLoop = false,避免Lambda等待空闲连接导致函数执行超时。

内容的提问来源于stack exchange,提问作者xeroshogun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:09:00