How to make Lambda + API Gateway obey REQUEST_URI?

0

I created an AWS Lambda with my application (a Web server) written in Rust Actix. I use https://crates.io/crates/lambda-web

Then I added this Lambda as the backend of an AWS HTTP API. The HTTP API has only $default stage.

https://XXX.execute-api.us-east-1.amazonaws.com/ produces correct result (what my packaged Web server outputs when the root is requested).

But https://XXX.execute-api.us-east-1.amazonaws.com/p/YYY produces: {"message":"Not Found"} what is surely not my Web server's output.

My task is to run the Web server in Lambda with path forwarded to the server in the normal way (as REQUEST_URI). So, when I request https://XXX.execute-api.us-east-1.amazonaws.com/p/YYY it should pass /YYY to my application. How?

Or probably it can be done with Lambda@Edge? Lambda@Edge follows the same protocol for Lambda as AWS HTTP API, doesn't it? In this case, there would be a CloudFront without origins, or what should I put as the origin, an arbitrary domain? Should Lambda@Edge be invoked on request or on response?

1 Antwort
0

Look at Proxy integrations. You need to define a greedy path using /{Proxy+}. This way you do not need to specify all routes in the API but rather specify one and let the Lambda function do the routing internally.

As an alternative you could create multiple routes and assign each one to a different function.

profile pictureAWS
EXPERTE
Uri
beantwortet vor 2 Jahren
profile picture
EXPERTE
überprüft vor einem Monat
  • After I added ANY /{proxy+} route, every request (including the root request /) returns {"message":"Internal Server Error"}.

    I tried both /{proxy+} and /{Proxy+}.

  • Is your target invoked? If so, maybe it returns a malformed answer.

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen