node.js - aws lambda 超时执行海王星查询
问题描述
我对 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;
}
索引.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 函数添加到与我的数据库相同的 VPC
推荐阅读
- python - 原始模型和模型(原始模型的输入,原始模型的输出)之间有什么不同吗?
- c# - C# 模板事件
- pdf-scraping - 使用 camelot 从 PDF 中提取表格数据时,没有从 PDF 中提取标题
- java - Spring-boot 从指标中删除执行器请求
- javascript - 如何使用 Promise & Ajax 中的数据
- sql - SQL 转换问题
- mobile - 应用程序中的卡支付,用于点对点支付
- c++ - 问题初始化 SimpleBlobDetector 的参数
- python - 张量流估计器的准确性和损失为零
- amazon-web-services - 如何使用 importValue 并加入 Cloudformation