7

我在 aws 中创建了一个海王星实例。我现在如何连接到它?

我从笔记本电脑本地尝试了文档中给出的示例。

from gremlin_python.structure.graph import Graph
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

graph = Graph()

g = graph.traversal().withRemote(DriverRemoteConnection('ws://my_endpoint:8182/gremlin','g'))

print(g.V().limit(2).toList())

但是我通过以下堆栈跟踪得到超时异常

File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/gremlin_python/driver/driver_remote_connection.py", line 45, in __init__
    password=password)
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/gremlin_python/driver/client.py", line 76, in __init__
    self._fill_pool()
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/gremlin_python/driver/client.py", line 88, in _fill_pool
    conn = self._get_connection()
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/gremlin_python/driver/client.py", line 101, in _get_connection
    self._transport_factory, self._executor, self._pool)
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/gremlin_python/driver/connection.py", line 40, in __init__
    self.connect()
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/gremlin_python/driver/connection.py", line 46, in connect
    self._transport.connect(self._url)
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/gremlin_python/driver/tornado/transport.py", line 33, in connect
    lambda: websocket.websocket_connect(url))
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/tornado/ioloop.py", line 458, in run_sync
    return future_cell[0].result()
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/tornado/concurrent.py", line 238, in result
    raise_exc_info(self._exc_info)
  File "<string>", line 4, in raise_exc_info
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/tornado/stack_context.py", line 316, in wrapped
    ret = fn(*args, **kwargs)
  File "/home/cegprakash/.virtualenvs/cegprakash-6Wq6Rd61/lib/python3.5/site-packages/tornado/simple_httpclient.py", line 307, in _on_timeout
    raise HTTPError(599, error_message)
tornado.httpclient.HTTPError: HTTP 599: Timeout while connecting

数据库连接时是否缺少任何身份验证?

4

3 回答 3

4

连接问题通常归因于您的安全组设置的某些问题。这已经在另一个问题[1]中得到了回答。在此处发布回复,以防万一。


如果您在连接到数据库时看到超时,第一步是检查您是否与端点建立了网络连接。

尝试:telnet endpoint port

如果您有连接,您会看到如下内容:

Trying 172.217.5.110...
Connected to endpoint (172.217.5.110).
Escape character is '^]'

如果这确实有效,那么任何 HTTP 客户端都应该能够连接到您的数据库。(卷曲,邮递员等)

如果 telnet 不起作用,那么几乎可以肯定您没有正确配置 EC2 安全组。您需要做的要点是:

  1. 创建一个安全组(例如“ec2”)并将其附加到您的 EC2 客户端实例。默认情况下,此安全组应允许到所有 IP 的出站连接。如果不是这种情况,请添加它。

  2. 创建一个安全组(比如“db”)。在入站规则中,添加一个允许入站 TCP 连接到您的数据库端口的规则,并将源作为在 #1 中创建的安全组。

  3. 现在修改您的 Neptune 集群,并将“db”附加到它。

  4. 安全组更改传播得非常快,因此您应该能够使用 telnet 对其进行测试。

您可能会发现其他答案表明您需要数据库和 EC2 实例位于同一安全组中。这并不完全正确,这只是上述步骤的一种特殊情况,您可以为数据库和客户端实例使用一个安全组,而不是创建 2 个安全组。从安全和设计的角度来看,最好为数据库和客户端实例设置单独的安全组。

希望这可以帮助。

[1] https://stackoverflow.com/a/51940587/3069919

于 2018-10-17T05:25:07.753 回答
2

AWS Neptune 只能从您设置集群的 VPC 中运行的 EC2 实例(或类似的东西)访问。

https://docs.aws.amazon.com/neptune/latest/userguide/security-vpc.html

如果这被证明是一个障碍,您可以使用 AWS Lambda 快速构建原型,它允许通过本教程访问 Neptune。

https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-lambda.html

于 2019-06-30T09:58:07.127 回答
1

确保您的 EC2 和 Neptune 在同一个 VPC 中。

在安全组中允许端口 8182 的 TCP 连接。

尝试将 URL 从 更改('ws://my_endpoint:8182/gremlin','g')('wss://my_endpoint:8182/gremlin','g')

它对我有用。

于 2020-05-04T05:36:02.460 回答