我在terraform中定义了dynamodb表:
name = "component_table"
partition_key = "name"
partition_key_type = "S"
sort_key = "version"
billing_mode = "PAY_PER_REQUEST"
environment = "testing"
aws_region = "eu-west-1"
restore_to_latest_time = true
point_in_time_recovery = true
extra_attributes = [
{
name = "version"
type = "S"
},
{
name = "team"
type = "S"
}
]
local_secondary_index = [
{
name = "TeamSecondaryIndex"
projection_type = "ALL"
range_key = "team"
}
]
我已经用aws操作符GetItem查询了它,为了测试的目的,我已经定义了name为abc,但似乎不能像它所说的那样查询GetItem函数
The provided key element does not match the schema error
我运行的函数是这样的:
func (m *Manager) ComponentGetByName(ctx context.Context, name string) (componentModel.Component, error) {
getItemInput := &awsDDB.GetItemInput{
TableName: &m.cfg.tableName,
Key: map[string]types.AttributeValue{
"name": &types.AttributeValueMemberS{
Value: name,
},
},
}
getItemOutput, err := m.Client.GetItem(ctx, getItemInput)
return getItemOutput
}
我省略了一些细节,例如将getItemOutput转换为保密的组件模型。我想知道为什么会发生这种情况以及如何解决它?欢迎讨论。谢谢!
1条答案
按热度按时间iswrvxsc1#
问题是你试图只使用分区键值来执行GetItem。要执行GetItem,你必须提供完整的主键,即分区和排序键值。在你的例子中,需要
name
和version
。如果你只知道分区密钥,你必须执行Query操作。
必须提供分区键属性的名称和该属性的单个值。查询将返回具有该分区键值的所有项