【发布时间】:2019-03-20 04:50:54
【问题描述】:
我正在尝试修改 lambda-microservice 示例以从 aws-api-gateway 向 dynamodb 提交 GET 查询。我已经让示例工作,但它执行的是表扫描,而不是查询。
查询尝试设置 KeyConditionExpression 失败,并显示以下消息: “由于客户函数错误,Lambda 执行失败,状态为 200:未定义名称‘键’。”
相关的python在这里:
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)
此查询表单与此帖子中使用的表单相同:
[Working query][1]
我得到了同样的错误。
另外,当我尝试设置 KeyConditions 时,我得到一个不同的错误: “由于客户函数错误,Lambda 执行失败,状态为 200:调用查询操作时发生错误(ValidationException):必须在请求中指定 KeyConditions 或 KeyConditionExpression 参数。”
相关的python在这里:
params = {
'TableName': 'Test',
'KeyConditions': {
"flight": {
'ComparisonOperator': "EQ",
'AttributeValueList': [{'S': '2002'}]
}
}
}
我的表(Test)有一个 GSI 索引,flight-index,以 flight 作为分区键,项目(所有类型的字符串)就是这些:
另一篇文章说:“nodejs SDK 不支持 KeyConditionExpression。”我使用 Python 3.7 有没有类似的问题?
我也没有在本地运行 DynamoDB。 (我正在寻找线索。)
尽管整个测试用例很简单,但我一定遗漏了一些非常简单的东西,但我已经挣扎了几天,阅读了几十篇文章来找到它。
有人可以帮助使用这些指定查询目标的方法吗?
【问题讨论】:
标签: python aws-lambda aws-api-gateway