通过 Bolt 驱动程序从 Lambda 查询 AWS Neptune 超时且无响应

问题描述 投票:0回答:1

我使用 Bolt 协议 (neo4j-driver) 从 AWS Lambda 函数 (Javascript) 到 AWS Neptune 数据库的查询超时,没有返回响应。我已打开调试模式,连接似乎已正确创建,查询已执行并似乎已完成,但由于某种原因,“tx.run”调用的承诺从未完成,操作只是超时。

测试代码如下所示:

const session = driver.session();
try {
    const result = await session.writeTransaction(tx =>
        tx.run(`MATCH (n) RETURN n`).then(result => {
            console.log('result', result)
        })
    )
} finally {
    await session.close()
}

启用调试的驱动程序输出以下内容(为了便于阅读而进行缩写):

11:22:27.217 INFO driver created
11:22:27.477 INFO 1704482547477 DEBUG Connection [0][] created towards db-neptune-3.cluster-****.us-west-1.neptune.amazonaws.com:8182
11:22:27.478 INFO 1704482547478 DEBUG Connection [0][] C: HELLO {user_agent: 'neo4j-javascript/4.3.3', ...}
11:22:27.608 INFO 1704482547608 DEBUG Connection [0][] S: SUCCESS {"signature":112,"fields":[{"server":"Neo4j/4.2.0-compatible-by-amazon-neptune","connection_id":"4a5a5efffeb5714f-00005357-0000001f-c7d239b9e462a6c7-3d9eac5f"}]}
11:22:27.616 INFO 1704482547616 DEBUG Connection [0][4a5a5efffeb5714f-00005357-0000001f-c7d239b9e462a6c7-3d9eac5f] created for the pool db-neptune-3.cluster-****.us-west-1.neptune.amazonaws.com:8182
11:22:27.617 INFO 1704482547617 DEBUG Connection [0][4a5a5efffeb5714f-00005357-0000001f-c7d239b9e462a6c7-3d9eac5f] C: BEGIN {}
11:22:27.618 INFO 1704482547618 DEBUG Connection [0][4a5a5efffeb5714f-00005357-0000001f-c7d239b9e462a6c7-3d9eac5f] C: RUN MATCH (n) RETURN n {} {}
11:22:27.618 INFO 1704482547618 DEBUG Connection [0][4a5a5efffeb5714f-00005357-0000001f-c7d239b9e462a6c7-3d9eac5f] C: PULL {"n":{"low":1000,"high":0}}
11:22:27.656 INFO 1704482547656 DEBUG Connection [0][4a5a5efffeb5714f-00005357-0000001f-c7d239b9e462a6c7-3d9eac5f] S: SUCCESS {"signature":112,"fields":[{}]}
11:22:29.545 INFO 1704482549545 DEBUG Connection [0][4a5a5efffeb5714f-00005357-0000001f-c7d239b9e462a6c7-3d9eac5f] S: SUCCESS {"signature":112,"fields":[{"fields":["n"],"result_available_after":1841}]}
11:22:32.118 Task timed out after 5.04 seconds

Lambda 函数有 5 秒超时(更长的超时不会改变此行为)。我是否在 Lambda 和 Neptune 之间的配置上做错了什么,导致返回结果出现通信问题? Lambda 函数和 Neptune DB 位于同一 VPC 中。据我所知,连接似乎正在正确建立(即身份验证正在工作等),查询正在传递到服务器并执行,并且结果正在等待。预先感谢您的帮助。

仅供参考 - Neptune 在“无服务器”模式下运行(引擎版本:1.2.0.1)。使用 4.3.3 版本的 javascript neo4j-driver。

我只是想在 Lambda 函数和新创建的 Neptune 数据库之间运行基本的 CRUD 测试。我有一段基本的测试代码,尝试对数据库运行查询,它似乎已交付,但由于某种原因,响应没有从 Neptune 返回和/或接收到我的 Lambda 函数。

javascript lambda bolt neo4j-driver neptune
1个回答
0
投票

根据提供的信息,很难确切地说出问题所在。

您的图表中有多少数据?

MATCH (n) RETURN n
将返回整个图表,通常是反模式,因为它会变得不可预测,并且很容易花费超过 5 秒的时间。如果你这样做
RETURN 1
会发生什么?

将 Neptune 数据库与 Lambda 结合使用时的最佳实践 (https://docs.aws.amazon.com/neptune/latest/userguide/best-practices-opencypher.html#best-practices-opencypher-lambda-connections) 是不使用螺栓驱动程序并使用 HTTPS 端点。 Bolt 的设计是为了保持长期连接,这是使用 Lambda 等无服务计算时的反模式。

我建议使用AWS SDK for Javascript,它支持执行openCypher命令: https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/neptunedata/command/ExecuteOpenCypherQueryCommand/

© www.soinside.com 2019 - 2024. All rights reserved.