好吧,我遇到的问题是我过去2天一直在处理的问题,而且似乎没有任何进展。
基本上,我正在尝试为亚马逊的回声点开发技能,但我的特殊技能需要使用持久数据。我接受了文档并发现了有关帐户链接和DynamoDB的信息,对于一个简单的研究项目,帐户链接似乎很复杂,所以我参加了DynamoDB。
我使用了lambda函数,它运行正常,直到我放入DynamoDB表格行:
alexa.dynamoDBTableName = 'rememberThisDB';
该行完全阻止了我的工作,并返回以下消息:
The remote endpoint could not be called, or the response it returned was invalid.
老实说,我不知道如何处理它;我对整个AWS概念都是全新的,所以我甚至不知道如何获得Lambda函数返回的实际错误消息。
我更改了角色并为其提供了以下配置:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"dynamodb:DeleteItem",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:Scan",
"dynamodb:UpdateItem"
],
"Resource": "*Yes, I did put the correct ARN*"
}
]
}
但这并没有真正改变任何东西,它仍然只是返回了相同的错误。
问题是,我没有对DynamoDB做任何事情,我只是定义了dynamoDBTableName
对象的alexa
属性,就是它。
是的,DynamoDB表存在。
我觉得我的脑袋即将爆炸,所以任何帮助都会非常感激。
更新:找到了如何查看日志,这里是最新的日志:Error fetching user state: ValidationException: The provided key element does not match the schema
,不知道为什么它会给出错误,因为我从来没有查询任何东西,我唯一做的就是声明表名称
答案 0 :(得分:1)
只是为了在评论中记录问题的解决方案,以便这个问题不会保持未得到解决的问题。在SO:
假设您正在使用alexa-skills-kit-sdk-for-nodejs,your table should have a single userId string HASH key。
var newTableParams = {
AttributeDefinitions: [
{
AttributeName: 'userId',
AttributeType: 'S'
}
],
KeySchema: [
{
AttributeName: 'userId',
KeyType: 'HASH'
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5
}
}
事实证明,用户没有为其DynamoDB表设置适当的架构。