#node.js #amazon-web-services #aws-lambda #gremlin #amazon-neptune
Вопрос:
Я очень новичок в AWS Neptune и gremlin и пытаюсь заставить свою лямбда-функцию выполнить простой запрос, но они зависают, и время ожидания лямбда-функции истекает, прежде чем я получу ответ. Я настроил подключение в соответствии с документами 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 resu<
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
}
Кто-нибудь знает, что я могу делать не так?
Комментарии:
1. Имеет ли ваша функция Lambda доступ к VPC Neptune? На что у вас установлен тайм-аут Лямбды? Возможно, попробуйте немного увеличить его, просто чтобы посмотреть, поможет ли это вообще.
2. Я думаю, что мне действительно нужно было предоставить ему доступ к VPC.
Ответ №1:
Моя проблема заключалась в том, что мне нужно было добавить лямбда-функцию в тот же VPC, что и в моей базе данных