【问题标题】:AWS Lambda function written in nodejs is not updating my DynamoDB用 nodejs 编写的 AWS Lambda 函数没有更新我的 DynamoDB
【发布时间】:2020-06-19 10:45:31
【问题描述】:

我是一名刚接触 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!");
};

【问题讨论】:

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


    【解决方案1】:

    确保你有这个配置:dynamodb:PutItem 在你的serverless.yml 文件中

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

    【讨论】:

      【解决方案2】:

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

      'use strict';
      console.log('Loading function');
      var AWS = require('aws-sdk');
      
      var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
      
      exports.handler = (event, context, callback) => {
      AWS.config.update({
        region: '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.');
      

      };

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-19
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多