«Динамо» переходит за другой стол

Я пытаюсь настроить поток из одного потока динамо, чтобы он мог помещать данные в другую таблицу динамо, но данные, похоже, не помещаются в целевую таблицу динамо

Код выполняется нормально, и cloudwatch не показывает никаких ошибок. У него достаточно прав для доступа к таблице динамо, в которую он пытается записать.

var AWS = require("aws-sdk");
const dynamoDb = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event, context) => {

event.Records.forEach((record) => {
    if (record.eventName != 'INSERT') {
        console.log('Ignored ' + record.eventName + ' stream event.');
        return;
    }

    var input = record.dynamodb.NewImage;
    var id = input.pageId.S;
    console.log(input);
    console.log(id);
        const params = {
            TableName: "target-table",
            Key: {
                "targetId": id,
            },
            Item: {"targetId": id},
        };
    dynamoDb.put(params).promise();


    console.log("put put the put put")
});
}

Я ожидаю, что данные, которые я ввожу в одну таблицу, будут реплицированы в цель, но, похоже, ничего не происходит.


person Community    schedule 15.01.2019    source источник


Ответы (2)


const dynamoDb = new AWS.DynamoDB.DocumentClient();
and
dynamoDb.put(params...

должно быть

const dynamodb = new AWS.DynamoDB();
and
dynamodb.putItem(params

Полный код, используемый в моей лямбде:

var AWS = require("aws-sdk");

exports.handler = async (event, context) => {
    const dynamodb = new AWS.DynamoDB();
    event.Records.forEach((record) => {
        if (record.eventName != 'INSERT') {
            console.log('Ignored ' + record.eventName + ' stream event.');
            return;
        }

        var input = record.dynamodb.NewImage;
        var id = input.pageId.S;
        console.log(input);
        console.log(id);
            const params = {
                TableName: "target-table",
                Item: {"targetId": {S: "emailaddress"}},
            };
         dynamodb.putItem(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response

 });


        console.log("put put the putput")
    });
    }
person Community    schedule 16.01.2019

вам нужно использовать ключевое слово await, так как ваша функция обработчика является функцией async

    //(...)
    await dynamoDb.put(params).promise();
    // (...) return at outside of forEach loop
    return {statusCode: 200, body : 'insertion is done'}
person milkcoke    schedule 20.03.2021