问题描述
此代码,我来自 Amazon Neptune 教程 https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-python.html 但是,当我尝试在 Jupyter Notebook(笔记本电脑内部)中运行代码时,出现了这样的错误。 This is my code
---------------------------------------------------------------------------
HTTPError Traceback (most recent call last)
<ipython-input-1-fae80b27d2c6> in <module>
12 g = graph.traversal().withRemote(remoteConn)
13
---> 14 print(g.V().limit(2).toList())
15
16 remoteConn.close()
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\process\traversal.py in toList(self)
56
57 def toList(self):
---> 58 return list(iter(self))
59
60 def toSet(self):
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\process\traversal.py in __next__(self)
46 def __next__(self):
47 if self.traversers is None:
---> 48 self.traversal_strategies.apply_strategies(self)
49 if self.last_traverser is None:
50 self.last_traverser = next(self.traversers)
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\process\traversal.py in apply_strategies(self,traversal)
571 def apply_strategies(self,traversal):
572 for traversal_strategy in self.traversal_strategies:
--> 573 traversal_strategy.apply(traversal)
574
575 def apply_async_strategies(self,traversal):
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\driver\remote_connection.py in apply(self,traversal)
147 def apply(self,traversal):
148 if traversal.traversers is None:
--> 149 remote_traversal = self.remote_connection.submit(traversal.bytecode)
150 traversal.remote_results = remote_traversal
151 traversal.side_effects = remote_traversal.side_effects
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\driver\driver_remote_connection.py in submit(self,bytecode)
54
55 def submit(self,bytecode):
---> 56 result_set = self._client.submit(bytecode,request_options=self._extract_request_options(bytecode))
57 results = result_set.all().result()
58 side_effects = RemoteTraversalSideEffects(result_set.request_id,self._client,C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\driver\client.py in submit(self,message,bindings,request_options)
125
126 def submit(self,bindings=None,request_options=None):
--> 127 return self.submitAsync(message,bindings=bindings,request_options=request_options).result()
128
129 def submitAsync(self,request_options=None):
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\driver\client.py in submitAsync(self,request_options)
146 if request_options:
147 message.args.update(request_options)
--> 148 return conn.write(message)
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\driver\connection.py in write(self,request_message)
53 def write(self,request_message):
54 if not self._inited:
---> 55 self.connect()
56 request_id = str(uuid.uuid4())
57 result_set = resultset.ResultSet(queue.Queue(),request_id)
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\driver\connection.py in connect(self)
43 self._transport.close()
44 self._transport = self._transport_factory()
---> 45 self._transport.connect(self._url,self._headers)
46 self._protocol.connection_made(self._transport)
47 self._inited = True
C:\ProgramData\Anaconda3\lib\site-packages\gremlin_python\driver\tornado\transport.py in connect(self,url,headers)
38 if headers:
39 url = httpclient.HTTPRequest(url,headers=headers)
---> 40 self._ws = self._loop.run_sync(
41 lambda: websocket.websocket_connect(url,compression_options=self._compression_options))
42
~\AppData\Roaming\Python\python38\site-packages\tornado\ioloop.py in run_sync(self,func,timeout)
456 if not future_cell[0].done():
457 raise TimeoutError('Operation timed out after %s seconds' % timeout)
--> 458 return future_cell[0].result()
459
460 def time(self):
~\AppData\Roaming\Python\python38\site-packages\tornado\concurrent.py in result(self,timeout)
236 if self._exc_info is not None:
237 try:
--> 238 raise_exc_info(self._exc_info)
239 finally:
240 self = None
~\AppData\Roaming\Python\python38\site-packages\tornado\util.py in raise_exc_info(exc_info)
~\AppData\Roaming\Python\python38\site-packages\tornado\stack_context.py in wrapped(*args,**kwargs)
314 if top is None:
315 try:
--> 316 ret = fn(*args,**kwargs)
317 except:
318 exc = sys.exc_info()
~\AppData\Roaming\Python\python38\site-packages\tornado\simple_httpclient.py in _on_timeout(self,info)
305 error_message = "Timeout {0}".format(info) if info else "Timeout"
306 if self.final_callback is not None:
--> 307 raise HTTPError(599,error_message)
308
309 def _remove_timeout(self):
HTTPError: HTTP 599: 连接超时
这是我得到的错误。 我该怎么办?
解决方法
Amazon Neptune 在私有 VPC 内运行。这意味着您将无法从笔记本电脑连接到它,除非您设置了连接到 VPC 的方法。这可以通过通过堡垒主机、ssh 端口转发或其他方式(例如客户端 VPN)设置 ssh 隧道来完成。下面是一个如何为 Document DB 执行此操作的示例,它与 Neptune 基本相同,只是 Neptune 使用端口 8182。
https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-from-outside-a-vpc.html