【问题标题】:Use DynamoDB with Alexa Lambda function将 DynamoDB 与 Alexa Lambda 函数结合使用
【发布时间】:2017-02-25 15:45:35
【问题描述】:

嗯,我有一个问题,我在过去 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 做任何事情,我只是定义了 alexa 对象的 dynamoDBTableName 属性,仅此而已。

是的,DynamoDB 表存在。

我觉得我的头快要炸了,所以非常感谢任何帮助。

更新:找到了如何查看日志,这是最新的日志:Error fetching user state: ValidationException: The provided key element does not match the schema,不知道为什么它会给出这个错误,因为我从来没有查询过任何东西,我唯一做的就是声明表名。

【问题讨论】:

  • 你的表的架构是什么?假设您使用的是 alexa-skills-kit-sdk-for-nodejs,your table should have a single userId string HASH key.
  • 刚刚检查,我有一个id 主索引,但没有userId,添加后它又开始工作了。我没有看到它记录在自述文件中。非常感谢你,你是一个救生员
  • 嗨,亚历山大,我也有同样的问题。你找到解决方案了吗? :)

标签: node.js amazon-web-services aws-lambda amazon-dynamodb alexa


【解决方案1】:

只是为了在 cmets 中记录问题的解决方案,这样这个问题就不会在 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 表设置适当的架构。

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 2018-09-11
    • 2020-05-23
    • 2019-07-19
    • 2019-07-28
    • 2018-05-05
    • 1970-01-01
    • 2019-09-22
    相关资源
    最近更新 更多