无法使用以 javascript 编写的 AWS Lambda 在 AWS Neptune 中提交事务

Unable to commit transactions in AWS Neptune using an AWS Lambda written in javascript

我需要使用 npm gremlin 库来使用 gremlin 事务。我仔细阅读了 tinkerpop 文档中提到的 javascript 的标准事务语法 - https://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript-transactions。我也在使用 AWS Lambda。我在我的 lambda 中保留了 1024MB 的 RAM 和 10 秒超时。但是我的 lambda 总是超时。

以下是我的 lambda 函数:

'use strict';

const gremlin = require('gremlin');
const { t: { id } } = gremlin.process;

exports.handler = async (event, context) => {
  const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
  const g = gremlin.process.traversal().withRemote(new DriverRemoteConnection(`<ws_graph_url>:8182/gremlin`,{}));
  console.log('initializing the transaction');
  const tx = g.tx();
  console.log('beginning of the transaction');
  const gtx = tx.begin();
  try {
    let id1 = 'kanhai-test-tx-1', id2 = 'kanhai-test-tx-2';
    console.log('before ops');
    await Promise.all([
      gtx.addV('TX1').property(id, id1).iterate(),
      gtx.addV('TX2').property(id, id2).iterate(),
    ]);
    console.log('after tx ops');
    console.log('before tx commit');
    await tx.commit();
    console.log('after tx commit');
  } catch(err) {
    console.error('Failed to complete the transaction:', err);
    tx.rollback();
  }
};

在执行涉及 2 个创建操作的 Promise.all() 期间,lambda 超时。

如果我从所有地方删除 await,我的 lambda 会在不到一秒的时间内成功运行并成功 returns。所有日志行都按预期打印。但是我的操作没有进行,因为我没有等待它们。

但是当我在我提到的任何地方保留 await 时,在我的 lambda 超时之前打印的最后一行日志是“before ops”,这是我写操作之前的日志行在 Promise.all.

此 lambda 运行 在托管我的 Neptune 集群的同一 VPC 中。我在没有交易的情况下尝试了多个查询,它们通过 gremlin 以及通过 HTTP 的 OpenCypher 成功运行。

我还没有找到任何可以帮助我使用 javascript 逐步执行成功交易的具体文档。任何帮助将不胜感激。

支持字节码事务,g.tx() 等需要 TinkerPop 服务器版本 3。5.x - 第一个支持该版本的 Neptune 版本是 1.1.1.0 版本(2022 年 4 月 19 日) .这可能是您的 Lambda 没有执行任何操作的原因,因为服务器在 Neptune 1.0.5.1 级别不支持 g.tx()。较旧的 Neptune 引擎版本为 TinkerPop 3.4.11 级别。

1.1.1.0 Neptune 引擎版本的发行说明在这里:https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.1.1.0.html