aws-lambda-cpp icon indicating copy to clipboard operation
aws-lambda-cpp copied to clipboard

invocation_response::failure does not work with HTTP API Gateway ?

Open fxfire opened this issue 4 years ago • 2 comments

I'm using the HTTP API Gateway, my c++ runtime is built with amazonlinux:latest in a docker image. All responses that return with invocation_response::failure return an Error 500, Internal Server Error.

#include <aws/lambda-runtime/runtime.h>
using namespace aws::lambda_runtime;
static invocation_response my_handler(invocation_request const& req)
{
  return invocation_response::failure("error message here"/*error_message*/, "error type here" /*error_type*/);
}

int main()
{
    run_handler(my_handler);
    return 0;
}

However, when I use invocation_response::success, the message arrives on my requesting client, but I ofc. can only send json objects back. (Anyone got an idea why that is ?)

I read everything google found and digged through all kinds of files and aws docus, I could not find out where the problem is. Could someone please give me a hint if the args have to match some specific ones or what I am doing wrong ? Thanks!

fxfire avatar Feb 27 '21 12:02 fxfire

I am having the same issue. Did you ever figure this out?

darrenwinslow avatar Sep 24 '21 15:09 darrenwinslow

The API Gateway example produced an internal server error even when I posted successful responses. I think it is because I created a REST API gateway.

What I found is that the API Gateway expects a specific response structure. When I used this structure my successful responses worked.

So it seems that when you use invocation_response::failure you report to the API Gateway that you cannot reply to this request. It then emits a 500

If you want to send a 400 error to the caller, you should include statusCode: 400 as part of the response structure and use invocation_response::success to send the structure through.

So maybe the solution is to switch to a REST API instead of an HTTP API?

From the docs

Choose REST APIs if you need features such as API keys, per-client throttling, request validation, ...

wduminy avatar Jul 18 '22 12:07 wduminy