将 DynamoDB 与 Alexa Lambda 函数结合使用
Use DynamoDB with Alexa Lambda function
好吧,我遇到了一个问题,过去 2 天我一直在处理这个问题,但似乎仍然没有任何进展。
基本上,我正在尝试为亚马逊的回声点开发一项技能,但我的特殊技能需要使用持久数据。我查看了文档并找到了有关帐户链接和 DynamoDB 的信息,帐户链接对于一个简单的研究项目来说似乎很复杂,所以我使用了 DynamoDB。
我使用了 lambda 函数,它 运行 很好,直到我将 DynamoDB table 行:
alexa.dynamoDBTableName = 'rememberThisDB';
那条线完全阻止了我的技能工作,returns 出现以下消息:
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 table 存在。
我觉得我的脑袋快要爆炸了,所以任何帮助将不胜感激。
更新:找到了如何查看日志,这是最新的日志:Error fetching user state: ValidationException: The provided key element does not match the schema
,不知道为什么会出现这个错误,因为我从来没有查询过任何东西,这是我唯一做的声明了 table 名称。
只是为了在评论中记录问题的解决方案,这样这个问题就不会 "unanswered" 在 SO:
Assuming you're using the 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 table 设置合适的模式。
好吧,我遇到了一个问题,过去 2 天我一直在处理这个问题,但似乎仍然没有任何进展。
基本上,我正在尝试为亚马逊的回声点开发一项技能,但我的特殊技能需要使用持久数据。我查看了文档并找到了有关帐户链接和 DynamoDB 的信息,帐户链接对于一个简单的研究项目来说似乎很复杂,所以我使用了 DynamoDB。
我使用了 lambda 函数,它 运行 很好,直到我将 DynamoDB table 行:
alexa.dynamoDBTableName = 'rememberThisDB';
那条线完全阻止了我的技能工作,returns 出现以下消息:
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 table 存在。
我觉得我的脑袋快要爆炸了,所以任何帮助将不胜感激。
更新:找到了如何查看日志,这是最新的日志:Error fetching user state: ValidationException: The provided key element does not match the schema
,不知道为什么会出现这个错误,因为我从来没有查询过任何东西,这是我唯一做的声明了 table 名称。
只是为了在评论中记录问题的解决方案,这样这个问题就不会 "unanswered" 在 SO:
Assuming you're using the 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 table 设置合适的模式。