【发布时间】:2021-01-25 16:12:22
【问题描述】:
我正在使用 Amplify 使用 dynamodb 的放大蓝图来设置具有相应 lambda 的 dynamodb。
使用 KeyConditionExpression 等以“经典”方式访问 dynamodb 效果很好,但今天我想尝试使用 PartiQL 来代替 executeStatement,但我无法让它工作。
我已将“dynamodb:PartiQLSelect”权限添加到所有其他 dynamodb 权限所在的 cloudfront 模板中,如下所示:
"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 (in from) 不正确,但名称与我在 AWS 中的名称匹配,并且它使用 documentclient 工作。
非常感谢任何关于可能出错的建议。
【问题讨论】:
标签: amazon-web-services amazon-dynamodb aws-amplify dynamodb-queries partiql