Amazon web services Amazon Lambda向DynamoDB写入

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

我是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 : ' + 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)
    }
});