bal*_*las 1 amazon-web-services node.js amazon-dynamodb aws-lambda
有一个名为 Portal 的 DynamoDB 表。从节点中编写的 Lambda 函数中,我想更新项目的status和字段(通过调用signalJobStart函数),并等待异步更新函数在继续之前以 Promise 完成。由于某种原因没有发生更新,但是在操作过程中没有出现错误。日志中没有错误,我可以在日志中看到“FINISHED”日志消息。ts
为什么表中的项目没有发生变化?为什么我在日志中既看不到错误消息也看不到成功消息?
(我也在没有承诺的情况下进行了尝试,得到了相同的结果。表项没有更新 - 即使是异步更新。)
以下是 Lambda 的代码:
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-1'});
module.exports = {
signalJobStart: function(accountId, jobId) {
console.log("Signaling job start for account %s and job %s", accountId, jobId);
let table = "Portal";
let params = {
TableName: table,
Key:{
"accountid": accountId,
"entity": jobId
},
UpdateExpression: "SET status = :s, ts = :t",
ExpressionAttributeValues:{
":s": "running",
":t": Date.now()
},
ReturnValues:"UPDATED_NEW"
};
let updatePromise = docClient.update(params, function(err, data) {
if (err) {
console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
}
}).promise();
updatePromise.then(function(data) {
console.log('Success');
}).catch(function(err) {
console.log(err);
});
console.log("FINISHED");
}};
Run Code Online (Sandbox Code Playgroud)
对我的案例有什么帮助:
以异步/等待方式执行:
exports.handler = async (event) => {
...
let _result = "";
try {
_result = await docClient.update(_updateParams).promise();
} catch(ex){
_result = ex;
}
..
Run Code Online (Sandbox Code Playgroud)确保我写入的字段不是保留字,如下例所示(“数据”是保留字):
{
..
UpdateExpression: "set data = :newdata",
ExpressionAttributeValues: {
":newdata": "blah"
},
..
Run Code Online (Sandbox Code Playgroud)
要检查这一点:将列重命名为“data2” - 它工作没有问题。
确保您拥有 IAM 控制台中“执行角色”的权限。
| 归档时间: |
|
| 查看次数: |
4760 次 |
| 最近记录: |