我正在使用Amplify使用DynamoDB进行设置,并使用DynamoDB的Amplify蓝图来设置相应的Lambda。
通过KeyConditionExpression等“传统”方式访问DynamoDB可以正常工作,但今天我想尝试使用executeStatement和PartiQL,但我无法使其工作。
我已经将“dynamodb: PartiQLSelect”权限添加到云前端模板中,其中包含所有其他DynamoDB权限,因此它看起来像:
"Action": [
"dynamodb:DescribeTable",
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:PartiQLSelect"
],
我并没有收到任何权限错误,所以我希望那部分没问题,但是即使没有添加那一行,它仍然返回相同的错误。
总是返回的错误是:ValidationException: Unexpected from source"
无论我尝试了什么,都没有帮助。 到目前为止,我的代码相当基本:
const dynamodb2 = new AWS.DynamoDB();
let tableName = "habits_sensors";
if(process.env.ENV && process.env.ENV !== "NONE") {
tableName = tableName + '-' + process.env.ENV;
}
app.get(path, function(req, res) {
let params = {
Statement: `select * from ${tableName}`
};
dynamodb2.executeStatement(params, (err, data) => {
if (err) {
res.statusCode = 500;
res.json({error: `Could not get users from : ${tableName} =>` + err});
} else {
res.json(data.Items);
}
});
});
从 Lambda 返回的完整错误字符串为:
{
"error": "Could not get users from : habits_sensors-playground =>ValidationException: Unexpected from source"
}
我在我的AWS账户中有一个名为habits_sensors-playground的表格,并且我可以通过传统的方式轻松访问它。这就是为什么“从源头意外”令人困惑的原因。 我理解它是指选择查询中的tableName(在from中)不正确,但名称与我在AWS中拥有的匹配,并且在使用documentclient时可以正常工作。
非常感谢任何可能出错的建议。