使用DynamoDB和Alexa Lambda函数

使用DynamoDB和Alexa Lambda函数

问题描述:

嗯,我有一个问题,我一直在处理过去两天,似乎仍然没有进展。使用DynamoDB和Alexa Lambda函数

基本上,我试图开发亚马逊的回声点的技能,但我的特殊技能需要使用持久性数据。我参考了文档,发现了有关帐户链接和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做任何事情,我只是定义alexa对象的dynamoDBTableName属性,就是这样。

是的,DynamoDB表存在。

我觉得我的脑袋即将炸毁,所以任何帮助将不胜感激。

更新:这里发现了如何看日志,是最新的日志:Error fetching user state: ValidationException: The provided key element does not match the schema,不知道为什么它会给这个错误,因为我从来没有质疑什么,我做的唯一的事情就是申报表名。

+1

你的表的模式是什么?假设您使用的是alexa-skills-kit-sdk-for-nodejs,[您的表应该有一个'userId'字符串HASH键](https://github.com/alexa/alexa-skills-kit-sdk - 用于-的NodeJS /斑点/主/ LIB/DynamoAttributesHelper.js#L82-L99)。 – idbehold

+0

刚刚检查过,我有一个'id'主索引,但不是'userId',添加后它又开始工作。我没有看到它在自述文件中记录。非常感谢你,你是一个拯救生命的人 – CristianHG

+0

嗨亚历山大,我有同样的问题。你有没有找到解决方案? :) –

只是为了记录这个问题的评价和分辨率,使这个问题不留“悬而未决”的SO:

假设你正在使用Alexa的技能-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表中相应的架构设置。