【发布时间】:2021-10-28 05:58:59
【问题描述】:
我对 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;
}
index.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 函数是否有权访问 Neptune VPC?您将 Lambda 超时设置为多少?也许尝试增加一点,看看是否有帮助。
-
我认为我确实需要授予它访问 VPC 的权限。
标签: node.js amazon-web-services aws-lambda gremlin amazon-neptune