AWS Lambda Dynamo 更新不会更新项目

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)

Vla*_*adS 5

对我的案例有什么帮助:

  1. 以异步/等待方式执行:

    exports.handler = async (event) => {
    ...
    let _result = "";
    try {
       _result = await docClient.update(_updateParams).promise();
    } catch(ex){
       _result = ex;
    }
    ..
    
    Run Code Online (Sandbox Code Playgroud)
  2. 确保我写入的字段不是保留字,如下例所示(“数据”是保留字):

    {
    ..
    UpdateExpression: "set data = :newdata",
    ExpressionAttributeValues: {
    ":newdata": "blah"
    },
    ..
    
    Run Code Online (Sandbox Code Playgroud)

    要检查这一点:将列重命名为“data2” - 它工作没有问题。

  3. 确保您拥有 IAM 控制台中“执行角色”的权限。