user1751825
user1751825

Reputation: 4309

NodeJS: AWS SDK V3: Not receiving any response data from lambda function

I'm trying to use the v3 javascript sdk to invoke a AWS Lambda function, and I'm having problems getting any meaningful response.

My code looks like so...

const { Lambda } = require("@aws-sdk/client-lambda");

const client = new Lambda();

const params = {
    FunctionName: "MyLamdaFuncton",
    Payload: JSON.stringify({ "action": "do_something"  }),
    InvocationType: "Event"
};

client.invoke(params)
    .then((response) => {
        console.log(JSON.stringify(response,null,4));
    })
    .catch((err) => {
        console.error(err);
    })

I can confirm from checking the CloudWatch logs that the lambda function works as exepcted. However this is the response I get in my NodeJS code...

{
    "$metadata": {
        "httpStatusCode": 202,
        "requestId": "d6ba189d-9156-4f01-bd51-efe34a66fe34",
        "attempts": 1,
        "totalRetryDelay": 0
    },
    "Payload": {}
}

How do I get the actual response and status from the Lambda function?

If I change the payload above to intentionally throw an exception in my Lambda, the response in the console is still exactly the same.

update: The Lambda function is written in Ruby. The response is returned like so...

{ statusCode: 200, body: JSON.generate(response.success?) }

where "response" is from another service it calls internally.

Upvotes: 1

Views: 1309

Answers (1)

user1751825
user1751825

Reputation: 4309

I've figured out what I was doing wrong. The issue was the "InvocationType". I got it working by changing to...

InvocationType: "RequestResponse"

Then I had to extract the response data like so...

const response_data = JSON.parse(new TextDecoder("utf-8").decode(response.Payload))

Upvotes: 3

Related Questions