Какой самый простой способ скопировать элемент из потока DynamoDB в другую таблицу?
У меня есть две таблицы DynamoDB, table1 и table2, с включенным потоком на table1. Оба имеют строковый ключ с именем "id". У меня также есть лямбда-функция, которая считывает вставки из таблицы table1 из потока и отражает их в table2, если они соответствуют определенным критериям. Вот мой код JS (синтаксис ES6), который не совсем работает:
const dynamoDb = new AWS.DynamoDB.DocumentClient();
function mirrorInserts(event, context, callback) {
event.Records.forEach((record) => {
if (record.eventName != 'INSERT') {
console.log('Ignored ' + record.eventName + ' stream event.');
return;
}
var input = record.dynamodb.NewImage;
var id = input.id.S
if (myCondition(input)( {
const params = {
TableName: table2,
Key: {
id: id,
},
Item: input,
};
dynamoDb.put(createParams, (result, error) => {
if (error) {
console.error(error);
}
});
});
}
Использование этой функции дает эту ошибку:
Одно или несколько значений параметров недопустимы: ожидаемое несоответствие типа идентификатора ключа: фактическое S: M
Сообщение достаточно легко интерпретировать, но оно меня смущает, поскольку используемый мной идентификатор должен быть строкой. Кроме того, есть ли простой способ просто вставить весь элемент, как есть?
1 ответ
Проблема заключалась в том, что клиент документов AWS ожидает стандартные объекты JSON, а не аннотированные значения AttributeValues, которые поступают непосредственно из БД. Я использовал DynamodBat-типы данных, чтобы развернуть данные, и все работало. В частности, я добавил
const attr = require('dynamodb-data-types').AttributeValue;
а затем изменил параметры на
const params = {
TableName: table2,
Key: {
id: id,
},
Item: attr.unwrap(input),
};