我在aws中创建了一个海王星实例。我现在如何连接到它?
我从笔记本电脑本地尝试了documentation中给出的示例。
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
数据库连接时是否缺少身份验证?
答案 0 :(得分:1)
连接性问题通常归因于安全组设置的某些问题。这已经在另一个问题[1]中得到了回答。如果有帮助,请在此处发布响应。
如果在连接数据库时看到超时,第一步将是检查您是否与端点具有网络连接。
尝试:telnet endpoint port
如果您具有连通性,则会看到以下内容:
Trying 172.217.5.110...
Connected to endpoint (172.217.5.110).
Escape character is '^]'
如果这行得通,那么任何HTTP客户端都应该能够连接到您的数据库。 (CURL,POSTMAN等)
如果telnet不起作用,则几乎可以肯定您没有正确配置EC2安全组。您需要做的要点是:
创建一个安全组(例如“ ec2”)并将其附加到您的EC2客户端实例。默认情况下,此安全组应允许到所有IP的出站连接。如果不是这种情况,请添加它。
创建一个安全组(例如'db')。在“入站规则”中,添加一个规则,该规则允许入站TCP连接到您的数据库端口,并将其作为在#1中创建的安全组。
现在修改您的Neptune群集,并在其上附加“ db”。
安全组更改传播得非常快,因此您应该能够使用telnet进行测试。
您可能会找到其他答案,这些答案表明您需要数据库和EC2实例位于同一安全组中。这并非完全正确,这只是上述步骤的特例,您可以为数据库和客户端实例使用一个安全组,而不必创建两个安全组。从安全和设计的角度来看,最好是为数据库和客户端实例设置单独的安全组。
希望这会有所帮助。
答案 1 :(得分:1)
确保您的EC2和Neptune在同一VPC中。
在安全组中,允许端口8182的TCP连接。
尝试从('ws://my_endpoint:8182/gremlin','g')
更改URL
到('wss://my_endpoint:8182/gremlin','g')
。
对我有用。
答案 2 :(得分:0)
只能从在其中设置群集的VPC中运行的EC2实例(或类似的实例)访问AWS Neptune。
https://docs.aws.amazon.com/neptune/latest/userguide/security-vpc.html
如果证明这是一个障碍,则可以使用AWS Lambda快速创建原型,该AWS Lambda允许通过本教程访问Neptune。
https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-lambda.html