problem with AWS neptuneDB Golang GremlinGo

huangapple go评论115阅读模式
英文:

problem with AWS neptuneDB Golang GremlinGo

问题

我正在使用neptuneDB AWS进行工作。我想在我的Ubuntu上进行本地测试。我为此编写了一些代码,但它不起作用。尽管我有秘密凭据。我想在本地使用Gremlin编写和测试基本的CRUD操作。但是我无法修复这段代码。这是我的代码示例:

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "github.com/aws/aws-sdk-go-v2/aws"
  7. "github.com/aws/aws-sdk-go-v2/config"
  8. "github.com/aws/aws-sdk-go-v2/service/neptune"
  9. "github.com/aws/aws-sdk-go-v2/service/neptune/types"
  10. "github.com/aws/aws-sdk-go-v2/aws/credentials"
  11. )
  12. const (
  13. ACCESS_KEY = "YOUR_ACCESS_KEY"
  14. SECRET_KEY = "YOUR_SECRET_KEY"
  15. )
  16. func main() {
  17. cfg, err := config.LoadDefaultConfig(context.TODO(),
  18. config.WithRegion("us-west-2"),
  19. config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(ACCESS_KEY, SECRET_KEY, "")),
  20. )
  21. if err != nil {
  22. log.Fatal("failed to load AWS config", err)
  23. }
  24. svc := neptune.NewFromConfig(cfg)
  25. // Insert data
  26. err = insertData(svc)
  27. if err != nil {
  28. log.Fatal("failed to insert data", err)
  29. }
  30. fmt.Println("Data inserted successfully")
  31. // Update data
  32. err = updateData(svc)
  33. if err != nil {
  34. log.Fatal("failed to update data", err)
  35. }
  36. fmt.Println("Data updated successfully")
  37. // Delete data
  38. err = deleteData(svc)
  39. if err != nil {
  40. log.Fatal("failed to delete data", err)
  41. }
  42. fmt.Println("Data deleted successfully")
  43. // Read data
  44. _, err = readData(svc)
  45. if err != nil {
  46. log.Fatal("failed to read data", err)
  47. }
  48. fmt.Println("Data read successfully")
  49. }
  50. // Insert data
  51. func insertData(svc *neptune.Client) error {
  52. query := "g.addV('Person').property('name', 'John').property('age', 30).property('em', 'eer')"
  53. _, err := executeGremlinQuery(svc, query)
  54. return err
  55. }
  56. // Update data
  57. func updateData(svc *neptune.Client) error {
  58. query := "g.V().has('name', 'John').property('age', 31)"
  59. _, err := executeGremlinQuery(svc, query)
  60. return err
  61. }
  62. // Delete data
  63. func deleteData(svc *neptune.Client) error {
  64. query := "g.V().has('name', 'John').drop()"
  65. _, err := executeGremlinQuery(svc, query)
  66. return err
  67. }
  68. // Read data
  69. func readData(svc *neptune.Client) ([]byte, error) {
  70. query := "g.V().has('name', 'John')"
  71. result, err := executeGremlinQuery(svc, query)
  72. if err != nil {
  73. return nil, err
  74. }
  75. fmt.Println("Result:", result)
  76. return result, nil
  77. }
  78. // Execute a Gremlin query
  79. func executeGremlinQuery(svc *neptune.Client, query string) ([]byte, error) {
  80. input := &types.ExecuteStatementInput{
  81. GremlinQueryString: &query,
  82. }
  83. output, err := svc.ExecuteStatement(context.TODO(), input)
  84. if err != nil {
  85. return nil, err
  86. }
  87. return output.Items[0].Properties["value"].Value.([]byte), nil
  88. }

希望这可以帮助到你。如果你有任何问题,请随时问我。

英文:

I am working with neptuneDB AWS. I want to test locally on my Ubuntu. I wrote some code for that but it's not working. Although I've secret credentials. I want to write and test the basic crud with Gremlin locally. I want to write and test the basic crud with Gremlin locally. But I can't and doesn't fix this code. this is my code sample

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "github.com/aws/aws-sdk-go-v2/aws"
  7. "github.com/aws/aws-sdk-go-v2/config"
  8. "github.com/aws/aws-sdk-go-v2/service/neptune"
  9. "github.com/aws/aws-sdk-go-v2/service/neptune/types"
  10. "github.com/aws/aws-sdk-go-v2/aws/credentials"
  11. )
  12. const (
  13. ACCESS_KEY = "YOUR_ACCESS_KEY"
  14. SECRET_KEY = "YOUR_SECRET_KEY"
  15. )
  16. func main() {
  17. cfg, err := config.LoadDefaultConfig(context.TODO(),
  18. config.WithRegion("us-west-2"),
  19. config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(ACCESS_KEY, SECRET_KEY, "")),
  20. )
  21. if err != nil {
  22. log.Fatal("failed to load AWS config", err)
  23. }
  24. svc := neptune.NewFromConfig(cfg)
  25. // Insert data
  26. err = insertData(svc)
  27. if err != nil {
  28. log.Fatal("failed to insert data", err)
  29. }
  30. fmt.Println("Data inserted successfully")
  31. // Update data
  32. err = updateData(svc)
  33. if err != nil {
  34. log.Fatal("failed to update data", err)
  35. }
  36. fmt.Println("Data updated successfully")
  37. // Delete data
  38. err = deleteData(svc)
  39. if err != nil {
  40. log.Fatal("failed to delete data", err)
  41. }
  42. fmt.Println("Data deleted successfully")
  43. // Read data
  44. _, err = readData(svc)
  45. if err != nil {
  46. log.Fatal("failed to read data", err)
  47. }
  48. fmt.Println("Data read successfully")
  49. }
  50. // Insert data
  51. func insertData(svc *neptune.Client) error {
  52. query := "g.addV('Person').property('name', 'John').property('age', 30).property('em', 'eer')"
  53. _, err := executeGremlinQuery(svc, query)
  54. return err
  55. }
  56. // Update data
  57. func updateData(svc *neptune.Client) error {
  58. query := "g.V().has('name', 'John').property('age', 31)"
  59. _, err := executeGremlinQuery(svc, query)
  60. return err
  61. }
  62. // Delete data
  63. func deleteData(svc *neptune.Client) error {
  64. query := "g.V().has('name', 'John').drop()"
  65. _, err := executeGremlinQuery(svc, query)
  66. return err
  67. }
  68. // Read data
  69. func readData(svc *neptune.Client) ([]byte, error) {
  70. query := "g.V().has('name', 'John')"
  71. result, err := executeGremlinQuery(svc, query)
  72. if err != nil {
  73. return nil, err
  74. }
  75. fmt.Println("Result:", result)
  76. return result, nil
  77. }
  78. // Execute a Gremlin query
  79. func executeGremlinQuery(svc *neptune.Client, query string) ([]byte, error) {
  80. input := &types.ExecuteStatementInput{
  81. GremlinQueryString: &query,
  82. }
  83. output, err := svc.ExecuteStatement(context.TODO(), input)
  84. if err != nil {
  85. return nil, err
  86. }
  87. return output.Items[0].Properties["value"].Value.([]byte), nil
  88. }

答案1

得分: 3

如果您想使用Go连接到Neptune,推荐的方式是使用gremlin-go驱动程序,而不是aws-sdk-go(请参阅Neptune文档这里)。

有关gremlin-go的其他信息,请参阅TinkerPop的参考文档。请注意,gremlin-go具有稍微不同的步骤语法,以匹配Go语言。如果您想使用Groovy语法提交脚本,可以参考这里的说明。

如果您想使用SigV4签名来连接到使用gremlin-go的IAM数据库,您可以按照Kelvin提供的答案进行操作。

希望对您有所帮助。

英文:

If you trying to connect to Neptune using Go, the recommended way is to use the gremlin-go driver instead of the aws-sdk-go (see Neptune docs here).

Additional gremlin-go information can be found in the TinkerPop reference docs. Note that gremlin-go has slightly different step syntax to match the Go language, if you'd like to submit scripts using Groovy syntax instead, see instructions here.

If you are trying to use SigV4 signing to connect to IAM database using gremlin-go, you can follow the answers that Kelvin linked.

Hope this helps.

huangapple
  • 本文由 发表于 2023年5月30日 00:07:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/76358801.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定