我是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!");
};
答案 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.');
};