从 AWS ECS 建立到 AWS Neptune 的连接的正确方法是什么?

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

背景/设置

我是...

  • 尝试使用 ECS Fargate 容器中的

    gremlin
    库 (
    node.js
    ) 进行连接。

  • 收到 403 错误。

  • 非常有信心VPC/安全组/等设置没问题,因为请求显然正在通过。

这是一个帮助解释上下文的图表Context Diagram

如果重要的话,这是我获取

{{ writer-endpoint }}
的地方: Neptune Console

我看到了这个讨论,但我不确定它是否适用。

有人对此有什么见解或建议吗?

我已经尝试过 Claude 和 ChatGPT 来解决这个问题,但是由于缺乏关于可能出现问题的详细信息,这使得解决这个问题非常困难。

我特意开放了 IAM 策略(例如,“*”表示资源访问)以便进行故障排除,并且我认为我已授予适当的 IAM 权限

更新:根据泰勒的以下回答,我能够解决该问题。 我创建了 他的答案的 TypeScript 版本,如果它对将来的任何人有帮助的话。

gremlin amazon-neptune
1个回答
1
投票

至于403错误的问题,很可能是由于IAM auth造成的。 您如何签署与 Neptune 的连接请求?

以下是通过 Gremlin-Javascript 库与 IAM 签名进行连接的示例。这将使用默认凭据提供程序链获取凭据。 在这种情况下,将从 ECS 任务执行角色提供的任何内容中获取。

const gremlin = require('gremlin');
const { fromNodeProviderChain } = require('@aws-sdk/credential-providers');
const {getUrlAndHeaders} = require('gremlin-aws-sigv4/lib/utils');
const __ = gremlin.process.statics;
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const Graph = gremlin.structure.Graph;

const region = 'us-west-2';
const getCredentials = async () => {
    let credentials;
    try {
      credentials = fromNodeProviderChain({ clientConfig: { region }});
    } catch (e) {
      console.error("No credentials found", e);
    }
    return credentials;
  };

(main = async () => {
    console.log('starting');
    let provider = await getCredentials();
    let creds = await provider();
    creds['region'] = region;
    conninfo = getUrlAndHeaders(
        'neptune-cluster-endpoint.us-west-2.neptune.amazonaws.com',
        '8182',
        creds,
        '/gremlin',
        'wss'); 

    console.log(conninfo);

    dc = new DriverRemoteConnection(conninfo['url'], { headers: conninfo['headers'] });

    const graph = new Graph();
    const g = graph.traversal().withRemote(dc);

    query = g.V('some-id').valueMap(true);

    res = await query.next();

    console.log(res);

    dc.close();
})

main()

这与我们文档中记录的示例 Node Lambda 函数类似 (https://docs.aws.amazon.com/neptune/latest/userguide/lambda-functions-examples.html#lambda-functions-examples -javascript)。 该示例更全面,因为它还提供了处理连接错误和重新连接的方法。

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