我正在尝试修改lambda-microservice示例,以从aws-api-gateway向dynamodb提交GET查询。我已经得到了可以运行的示例,但是它执行的是表扫描,而不是查询。
查询尝试使用以下消息设置KeyConditionExpression失败: “由于客户功能错误,Lambda执行失败,状态为200:未定义名称'Key'。”
相关的python在这里:
List<Entry> list = new ArrayList(entries);
此查询表单与此帖子中使用的表单相同:
operations = {
'GET': lambda dynamo, x: dynamo.query(**x),
}
dynamodb = boto3.resource('dynamodb')
params = {
'KeyConditionExpression': Key('flight').eq("2002")
}
table = dynamodb.Table('Test')
response = table.query(params)
我在上面遇到了同样的错误。
或者,尝试设置KeyConditions时出现另一种错误: “由于客户函数错误,Lambda执行失败,状态为200:调用Query操作时发生错误(ValidationException):必须在请求中指定KeyConditions或KeyConditionExpression参数。。
相关的python在这里:
[Working query][1]
我的表(测试)具有一个GSI索引,即flight-index,其中将flight作为分区键,而各项(所有类型的字符串)就是这些:
另一篇文章说:“ nodejs SDK不支持KeyConditionExpression。”我使用Python 3.7是否有任何类似的问题?
我也不在本地运行DynamoDB。 (我正在抓住稻草来寻找线索。)
就整个测试案例而言,它很简单,我肯定会错过一些非常简单的东西,但是我已经苦苦挣扎了几天,并且阅读了数十篇文章来找到它。
有人可以通过这两种方式指定查询目标吗?
答案 0 :(得分:0)
有两个不同的问题使我的问题复杂化。我猜没有人回答,因为没有明显的解决方法。
我必须要做的:
导入密钥python库:
非常感谢@ user3303554在this answer中为导入密钥from boto3.dynamodb.conditions import Key
DynamoDB查询权限: 最终,这给了我一个AccessDeniedException,表明我的lambda函数没有查询DynamoDb的权限。非常感谢this answer中的@Lisa M Shon将我指向http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/using-identity-based-policies.html,因为这表明我开始修改的微服务示例具有读/写权限,但没有查询权限。将其添加到角色中,它就像一种魅力。
希望这可以帮助其他人尝试执行简单的DynamoDB查询。