【问题标题】:Create item in dynamodb using go使用 go 在 dynamodb 中创建项目
【发布时间】:2018-02-28 19:10:38
【问题描述】:

我正在使用以下代码在我的 dynamodb 表中创建一个项目:

package main

import (
    "fmt"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/aws/endpoints"
    "github.com/aws/aws-sdk-go-v2/aws/external"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb/dynamodbattribute"
)

type Record struct {
    ID     string
    URLs   []string
}


// Using the SDK's default configuration, loading additional config
// and credentials values from the environment variables, shared
// credentials, and shared configuration files
var cfg, err = external.LoadDefaultAWSConfig()

func createNewExtraction() error {
    svc := dynamodb.New(cfg)

    r := Record{
        ID:   "ABC123",
        URLs: []string{
            "https://example.com/first/link",
            "https://example.com/second/url",
        },
    }
    item, err := dynamodbattribute.MarshalMap(r)
    if err != nil {
        panic(fmt.Sprintf("failed to DynamoDB marshal Record, %v", err))
    }

    req := svc.PutItemRequest(&dynamodb.PutItemInput{
        TableName: aws.String("test"), Item: item })

    _, err = req.Send(); if err != nil {
        return err
    }
    return nil
}

func main() {
    if len(cfg.Region) > 0 {
        // Set Region to us-east-1 as default.
        cfg.Region = endpoints.UsEast1RegionID
    }

    err = createNewExtraction(); if err != nil {
        panic(err.Error())
    }
}

但它返回错误:

panic: ValidationException: One or more parameter values were invalid: Missing the key id in the item
    status code: 400, request id: F3VCQSGRIG5GM5PEJE7T5M4CEVVV4KQNSO5AEMVJF66Q9ASUAAJG

goroutine 1 [running]:
main.main()
    /Users/user/go/src/Test2/test.go:56 +0x102
exit status 2

我已经尝试在我的 Record 结构中声明 Id、id 和 ID,但它不起作用。

奇怪的是:我在官方文档中得到了这段代码(我正在更新以使用 aws-sdk-go-v2)。

提前谢谢你。

【问题讨论】:

  • 您的 DynamoDB 表的键是什么?分区键在您的项目中是强制性的,并且区分大小写。
  • @Costin 我只有两个键:id 和 url。
  • 所以在任何地方都使用id 而不是ID。如果您使用URLs 作为排序键,请将其命名为url 并更改其类型,如果我没记错只能是StringNumberBinary
  • 我进行了更新,但我仍然看到:恐慌:ValidationException:一个或多个参数值无效:缺少项目中的键 ID。也许这是因为我使用的是 aws-sdk-go-v2?
  • 你能打印发送的item吗,这里生成的那个:item, err := dynamodbattribute.MarshalMap(r)

标签: amazon-web-services go amazon-dynamodb


【解决方案1】:

我不知道golang,但我在nodejs也遇到过类似的问题。

确保您放入表中的item 包含“分区键”和sorting key,区分大小写。

编辑:

• 这是golang 问题,当DynamoDB 列名称为小写时,item 未正确构建。

• 考虑重新定义Record 结构(详见this link):

type Record struct{
    ID     string `json:"id"`
    URLs   []string `json:"url"`
}

其中idurl 是DynamoDB 表中的列名。

【讨论】:

猜你喜欢
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多