I'm trying to invoke a lambda function from node.
var aws = require('aws-sdk');
var lambda = new aws.Lambda({
accessKeyId: 'id',
secretAccessKey: 'key',
region: 'us-west-2'
});
lambda.invoke({
FunctionName: 'test1',
Payload: JSON.stringify({
key1: 'Arjun',
key2: 'kom',
key3: 'ath'
})
}, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
The keys are for an IAM user. The user has AWSLambdaExecute
and AWSLambdaBasicExecutionRole
policies attached.
I get a permission error:
AccessDeniedException: User: arn:aws:iam::1221321312:user/cli is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-west-2:1221321312:function:test1
I read the docs and several blogs, but I'm unable to authorise this user to invoke the lambda function. How do get this user to invoke lambda?
Thanks.
The AWSLambdaExecute
and AWSLambdaBasicExecutionRole
do not provide the permissions that are being expressed in the error. Both of these managed policies are designed to be attached to your Lambda function itself, so it runs with these policies.
The error is saying the user under which the nodejs program is running does not have rights to start the Lambda function.
You need to give your IAM user the lambda:InvokeFunction
permission:
Sample policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1464440182000",
"Effect": "Allow",
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
}
In this policy, I have included both methods to invoke lambda methods.
Update:
There is now also an IAM Managed Policy named AWSLambdaRole
that you can assign to your IAM user or IAM role. This should give you the permissions you need.