用nodejs编写的AWS Lambda函数未更新我的DynamoDB

时间:2019-06-21 23:10:24

标签: node.js amazon-web-services aws-lambda amazon-dynamodb

我是AWS的新手,但是我遇到了障碍。 我正在尝试使用lambda函数来更新我的dynamodb表中项目的属性。 lambda函数正在被触发,但是由于某种原因,我无法更新该项目。

我能够从dynamodb中成功删除该项目,但是当我尝试更新该项目的属性时,没有任何反应。

函数执行后,human_confirmed属性未更新为true。我一直在尝试在Google上找到的其他方法,但是没有任何效果:(

console.log('Loading function');
var AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    AWS.config.update({
      region: "us-east-1"
    });

    var dynamodb = new AWS.DynamoDB.DocumentClient();
    var instance = event.instanceID;
    var InstanceName = instance;

    var params = {
        TableName: "reminders",
        Key: {
            "instanceID": {
             S: InstanceName
            },
        },
      UpdateExpression: 'SET #a = :x',
      ExpressionAttributeNames: {'#a' : 'human_confirmed'},
      ExpressionAttributeValues: {
        ':x' : 'true',
      },
      ReturnValues:"UPDATED_NEW"
    };
    dynamodb.update(params, function(err, data) {
        if (err) 
            callback(err, null); // an error occurred
        else     
            callback(null, data);           // successful response
    });
    callback(null, "Updating resource from reminder table: " + InstanceName + ".... The system will no longer contain automated emails about this resource's tags!");
};

2 个答案:

答案 0 :(得分:2)

确保您具有以下配置:dynamodb:PutItem文件中的serverless.yml

iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "dynamodb:PutItem"
      Resource: "*"

答案 1 :(得分:0)

感谢您的帮助@ kaxi1993 我相信我的IAMRole权限是正确的。这是对我有用的代码。

'use strict';

console.log('加载函数'); var AWS = require('aws-sdk');

var dynamodb =新的AWS.DynamoDB({apiVersion:'2012-08-10'});

exports.handler =(事件,上下文,回调)=> {     AWS.config.update({       地区:“ us-east-1”     });

var instance = event.instanceID;

var params = {
    TableName: 'reminders',
    Key: {
        'instanceID': {
         S: instance
        }
    },
    UpdateExpression: 'set human_confirmed = :x',
    ExpressionAttributeValues: {
       ':x': {S: 'true'},
    },
    ReturnValues: 'UPDATED_NEW'
};
dynamodb.updateItem(params, function(err, data) {
    if (err) 
        callback(err, null); // an error occurred
    else     
        callback(null, data);           // successful response
});
callback(null, 'Updating instance from reminder table: ' + instance + '.... The system will no longer contain automated emails about this resource.');

};