AmazingDayToday
AmazingDayToday

Reputation: 4272

{Status: 202} when running a lambda from code

This is my code in Javascript:

    var params = {
        FunctionName: "theTable",
        InvokeArgs: JSON.stringify({ "name": "KirklandWA" })
    };
    lambda.invokeAsync(params, function (err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else {
            console.log(data);
        }
    });

This is in Lambda:

exports.handler = async (event, context) => {
    return "theReturnedValue";
};

What is happening is that it is not returning the theReturnedValue, instead returns

{Status: 202} Status: 202

The code in Lambda is getting invoked, I made sure of it at Cloudwatch.

Upvotes: 6

Views: 10931

Answers (3)

Van Manh
Van Manh

Reputation: 149

You're invoking with invokeAsync which will only return status code as stated in the documentation. Use invoke with InvocationType: "RequestResponse" instead

Reference: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property

var lambda = new AWS.Lambda({});
var params = {
  FunctionName: "function_name", 
  InvocationType: "RequestResponse"
};
response = lambda.invoke(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Upvotes: 13

ene_salinas
ene_salinas

Reputation: 705

Verify that your lambda this selected as NodeJs 8.10 runtime, once having verified you must return a promise directly:

exports.handler = async (event, context) => {
    return await new Promise((resolve, reject) => {
        resolve({ message: "hello world" });
    });
};

I was looking invokeAsync method definition in the aws-sdk documentation and the status code is fine:

Callback parameters:

  1. err (Error) — the error object returned from the request. Set to null if the request is successful.
  2. data (Object) — the de-serialized data returned from the request. Set to null if a request error occurs. The data object has the following properties:
    • Status — (Integer) It will be 202 upon success.

I prepare you a basic example, please review handler.js file:

https://github.com/ns4lin4s/stackoverflow

Dont forget, that you must specify response body:

enter image description here

So when you finish, let me know how that works!

Upvotes: 0

Tiisetso Tjabane
Tiisetso Tjabane

Reputation: 2106

The problem is that your lambda function is not returning anything back to the caller.

Your handle funtion has a third parameter which is a callback function that is used to return results to the caller.

The callback function takes in two values, an Error and results

callback(Error error, Object result);

If you provide the Error values the lambda will throw the an error you provide to the user, if you dont provide an Error value but the results, its the results that will be returned

Its all documented very well here

Here are basic examples

callback();     // Indicates success but no information returned to the caller.
callback(null); // Indicates success but no information returned to the caller.
callback(null, "success");  // Indicates success with information returned to the caller.
callback(error);    //  Indicates error with error information returned to the caller.

Your handler function should be.

exports.handler = async (event, context,callback) => {
     callback(null, "theReturnedValue");
};

Upvotes: -1

Related Questions