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

如何在本地通过Node.js测试AWS Neptune数据库?

解决方案:Node.js连接AWS Neptune(无需手动SSH)

一、完全可行,两种实现方式

1. 将应用部署到Neptune所在VPC内

如果你的Node.js应用可以部署到Neptune同一VPC的EC2、ECS或EKS中,直接用AWS推荐的gremlin包连接Neptune的WebSocket端点即可,代码和标准Gremlin连接逻辑一致:

const gremlin = require('gremlin');
const { DriverRemoteConnection } = gremlin.driver;
const { Graph } = gremlin.structure;

async function connectToNeptune() {
  const connection = new DriverRemoteConnection(
    'wss://your-neptune-endpoint:8182/gremlin',
    {
      mimeType: 'application/vnd.gremlin-v2.0+json'
    }
  );

  const graph = new Graph();
  const g = graph.traversal().withRemote(connection);

  try {
    const result = await g.V().limit(10).toList();
    console.log('Query result:', result);
  } catch (err) {
    console.error('Connection error:', err);
  } finally {
    await connection.close();
  }
}

connectToNeptune();

2. 用Node.js代码自动建立SSH隧道(适合本地开发/外部应用)

如果应用不在VPC内,可通过Node.js的SSH库(如ssh2)自动建立端口转发,将Neptune的8182端口映射到本地端口,再用gremlin包连接本地WebSocket端点,无需手动执行SSH命令:

先安装依赖:

npm install gremlin ssh2

再编写代码:

const gremlin = require('gremlin');
const { Client } = require('ssh2');
const { DriverRemoteConnection } = gremlin.driver;
const { Graph } = gremlin.structure;

// 跳板机(VPC内的EC2)配置
const sshConfig = {
  host: 'your-bastion-ec2-public-ip',
  port: 22,
  username: 'ec2-user',
  privateKey: require('fs').readFileSync('/path/to/your/private-key.pem')
};

// Neptune集群端点配置
const neptuneConfig = {
  host: 'your-neptune-cluster-endpoint',
  port: 8182
};

// 本地转发端口
const localPort = 8182;

async function connectWithSSHTunnel() {
  return new Promise((resolve, reject) => {
    const sshClient = new Client();

    sshClient.on('ready', () => {
      console.log('SSH tunnel established');
      sshClient.forwardOut(
        'localhost',
        localPort,
        neptuneConfig.host,
        neptuneConfig.port,
        (err, stream) => {
          if (err) {
            sshClient.end();
            return reject(err);
          }

          // 通过SSH隧道的流建立Gremlin连接
          const connection = new DriverRemoteConnection(
            `ws://localhost:${localPort}/gremlin`,
            {
              mimeType: 'application/vnd.gremlin-v2.0+json',
              transport: () => stream
            }
          );

          const graph = new Graph();
          const g = graph.traversal().withRemote(connection);
          resolve({ g, connection, sshClient });
        }
      );
    }).on('error', reject).connect(sshConfig);
  });
}

// 使用示例
async function runQuery() {
  let resources;
  try {
    resources = await connectWithSSHTunnel();
    const result = await resources.g.V().limit(5).toList();
    console.log('Query result:', result);
  } catch (err) {
    console.error('Error:', err);
  } finally {
    if (resources) {
      await resources.connection.close();
      resources.sshClient.end();
    }
  }
}

runQuery();

二、本地替代方案:Apache Gremlin Server

如果不想处理VPC/SSH的复杂性,Apache Gremlin Server是完全兼容Neptune的本地图数据库(Neptune基于TinkerPop Gremlin标准),可通过环境变量无缝切换开发与生产环境的连接:

  1. 用Docker快速启动本地Gremlin Server:
docker run -p 8182:8182 tinkerpop/gremlin-server:3.6.2
  1. 代码中通过环境变量切换连接:
const gremlin = require('gremlin');
const { DriverRemoteConnection } = gremlin.driver;
const { Graph } = gremlin.structure;

async function getGraphTraversal() {
  // 生产环境设置NEPTUNE_ENDPOINT,开发环境默认连接本地服务
  const endpoint = process.env.NEPTUNE_ENDPOINT || 'ws://localhost:8182/gremlin';
  const connection = new DriverRemoteConnection(endpoint, {
    mimeType: 'application/vnd.gremlin-v2.0+json'
  });
  const graph = new Graph();
  return graph.traversal().withRemote(connection);
}

// 环境变量配置示例:
// 生产环境:export NEPTUNE_ENDPOINT="wss://your-neptune-endpoint:8182/gremlin"
// 开发环境:无需设置,自动连接本地Gremlin Server

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:00:24