我目前正在尝试通过 go 建立与 aws neptune 的连接,但它不起作用。我能够连接到 aws 本身,但是当我尝试连接到 neptune db 时,它显示“无法建立成功的连接:拨打 tcp 172.31.4.48:8182: i/o 超时”。我正在使用 gremlingo 模块,如这段代码
package main
import (
"fmt"
"net/http"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/neptune"
"github.com/gin-gonic/gin"
gremlingo "github.com/apache/tinkerpop/gremlin-go/v3/driver"
)
func main() {
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-east-id1"),
Credentials: credentials.NewStaticCredentials("AWS-id key", "aws secret id key", ""),
})
if err != nil {
fmt.Println("Couldn't create new session")
return
}
neptune.New(sess)
driverRemoteConnection, err := gremlingo.NewDriverRemoteConnection("wss://database-1-instance-1.asdasdasd.us-east-1.neptune.amazonaws.com:8182/gremlin",
func(settings *gremlingo.DriverRemoteConnectionSettings) {
settings.TraversalSource = "g"
})
if err != nil {
fmt.Println(err)
return
}
//Cleanup
defer driverRemoteConnection.Close()
//Creating graph traversal
g := gremlingo.Traversal_().WithRemote(driverRemoteConnection)
// Perform traversal
results, err := g.V().Limit(2).ToList()
if err != nil {
fmt.Println(err)
return
}
// print results
for _, r := range results {
fmt.Println(r.GetString())
}
}
我不太确定问题是什么,所以我尝试连接到集群本身,但由于它不起作用,我尝试连接到 writer。 非常感谢您的帮助。
致以诚挚的问候
正确答案
Amazon Neptune 在 VPC 内部运行,并且不公开公共终端节点。设计用于发送查询的代码必须有权访问该 VPC。这可能就像在同一 VPC 中的 EC2 实例上运行的代码一样简单,但还有许多其他方式可以授予对 VPC 的访问权限,例如负载均衡器、VPC 对等互连、直接连接等等。 p>
检查代码是否可以访问数据库的一个简单方法是从同一源点向 /status
API 发送 HTTP 请求,看看它是否有效。