Когда вы впервые создаете элемент Todo, он сохраняется как элемент в таблице DynamodDB. Чтобы обновить элемент задачи, вам необходимо обновить элемент в таблице DynamoDB.
Когда вы обновляете элемент в DynamoDB, вам необходимо использовать AWS SDK, чтобы справиться с этим. Самый простой SDK - использовать Клиент документов AWS DynamoDB, если вы используете nodejs в лямбда-функции.
// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({region: 'REGION'}); //replace Region with the region you are using ('EU-WEST-1')
// Create DynamoDB document client
var docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
// put the the following code in the exports.handler in your lambda function
var params = {
TableName: 'Todo-SOMERANDOMSTRING-ENV',//The name of your dynamodb table
Key: {
'id' : 'asasd123-asdsa1-12sdasads-12', // the id of your todo item
},
UpdateExpression: 'set status = :s',
ExpressionAttributeValues: {
':s' : 'To do' // what the new status should be
}
};
// and run the update function
docClient.update(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
Изменить
Основываясь на вашем комментарии, я думаю, что вы можете быть в разделе DynamoDB Lambda Triggers (?), И ваша шаблонная лямбда-функция может выглядеть так:
exports.handler = function (event, context) {
console.log(JSON.stringify(event, null, 2));
event.Records.forEach((record) => {
console.log(record.eventID);
console.log(record.eventName);
console.log('DynamoDB Record: %j', record.dynamodb);
});
context.done(null, 'Successfully processed DynamoDB record');
};
Я сам раньше не использовал этот тип триггера, поэтому я не совсем уверен, как структурированы данные в записи, но я думаю, что он может быть доступен следующим образом:
record.data.id
//or
record.Item.id
Вы можете узнать это, перейдя в лямбда-консоль, найдите и откройте свою лямбда-функцию, перейдите в «мониторинг», а затем откройте «Просмотр журналов в CloudWatch» в AWS и проверьте журналы CloudWatch после создания элемента.
Предполагая, что это record.Item.id, ваш лямбда-код может выглядеть следующим образом (непроверенный):
var AWS = require('aws-sdk');
AWS.config.update({region: 'REGION'});
var docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.handler = function (event, context) {
console.log(JSON.stringify(event, null, 2));
event.Records.forEach((record) => {
var params = {
TableName: 'YOUR-DB-TABLE-NAME',
Key: {
'id' : record.Item.id,
},
UpdateExpression: 'set status = :status',
ExpressionAttributeValues: {
':status' : 'To do' // what the new status should be
}
};
docClient.update(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
});
context.done(null, 'Successfully processed DynamoDB record');
};
Я не думаю, что этот код полностью завершен, и вам, возможно, придется изменить то, как / когда работает функция context.done (потому что я думаю, что она будет запущена до того, как код завершит обновление элемента), но это может дать вам несколько в правильном направлении.
person
Engam
schedule
21.04.2020