Amazon web services Amazon Lambda向DynamoDB写入
我是dynamoDB的新手,我正在尝试使用Lambda将一些数据写入表中。 到目前为止,我有:Amazon web services Amazon Lambda向DynamoDB写入,amazon-web-services,aws-lambda,amazon-dynamodb,alexa,alexa-skills-kit,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Alexa,Alexa Skills Kit,我是dynamoDB的新手,我正在尝试使用Lambda将一些数据写入表中。 到目前为止,我有: 'AddFood': function () { var FoodName = this.event.request.intent.slots.FoodName.value; var FoodCalories = this.event.request.intent.slots.FoodCalories.value; console.log('FoodName : ' + Fo
'AddFood': function () {
var FoodName = this.event.request.intent.slots.FoodName.value;
var FoodCalories = this.event.request.intent.slots.FoodCalories.value;
console.log('FoodName : ' + FoodName);
const params = {
TableName: 'Foods',
Item: {
'id': {"S": 3},
'calories': {"S": FoodCalories},
'food': {"S": FoodName}
}
};
writeDynamoItem(params, myResult=>{
var say = '';
say = myResult;
say = FoodName + ' with ' + FoodCalories + ' calories has been added ';
this.response.speak(say).listen('try again');
this.emit(':responseReady');
});
function writeDynamoItem(params, callback) {
var AWS = require('aws-sdk');
AWS.config.update({region: AWSregion});
var docClient = new AWS.DynamoDB();
console.log('writing item to DynamoDB table');
docClient.putItem(params, function (err, data) {
if (err) {
callback(err, null)
} else {
callback(null, data)
}
});
}
}
有人知道为什么数据没有出现在数据库中吗?
我已检查IAM,并且策略设置为AmazondynamodFullAccess。要从Lambda函数(使用Python)写入DynamoDB,必须使用
bot3
包并加载DynamoDB资源:
希望这能有所帮助,它会从活动中记录食物和卡路里,并用生成的uuid记录它们
import boto3
import os
import uuid
def writeToDynamo(event, context):
recordId = str(uuid.uuid4())
voice = event["food"]
text = event["calories"]
print('Generating new DynamoDB record, with ID: ' + recordId)
print('Input food: ' + food)
print('Input calories: ' + calories)
#Creating new record in DynamoDB table
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['DB_TABLE_NAME'])
table.put_item(
Item={
'id' : recordId,
'food' : food,
'calories' : calories
}
)
return recordId
对write函数进行一些更改后,以下代码允许我将项目写入数据库: 函数writeDynamoItem(参数,回调){
}我知道,我可以在python方面提供帮助。Op需要一个函数来写入dynamodb。他没有说任何关于语言的事。您可以用不同的语言组合函数一般来说,您应该优先使用get()或query(),而不是scan(),因为扫描将读取每个项目。下面是一个调用putItem的JS示例:谢谢你的提示。你知道为什么上面的代码没有将项目放入数据库吗?putItem()调用失败了吗?您如何检查项目是否未写入?您是否有可能在多个区域中有相同的命名表,并且正在写入错误的表?PS您的docClient命名错误。SDK有两个接口(服务接口和文档客户端)-您使用的是前者,但您的变量的命名方式与您使用的是后者。我正在amazon开发者网站上通过运行该技能对其进行测试。我只有一个表,我通过进入dynamoDB查看表中的项目来检查它。调用似乎正在执行,但表中没有显示任何新内容。知道怎么了吗?想和大家分享一下问题是什么吗?
const AWS = require('aws-sdk');
AWS.config.update({region: AWSregion});
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-1'});
console.log('writing item to DynamoDB table');
docClient.put(params, function (err, data) {
if (err) {
callback(err, null)
console.error("Unable to write item. Error JSON:", JSON.stringify(err, null, 2))
} else {
callback(null, data)
}
});