aws / aws-lambda-runtime-interface-emulator

Apache License 2.0
921 stars 95 forks source link

How to invoke a function with custom client context? #74

Closed nekketsuuu closed 2 months ago

nekketsuuu commented 1 year ago

On AWS, I'm using Lambda function which receives event data and custom client context. For local testing, I want to run curl and invoke function with custom client context, defined as: https://github.com/aws/aws-lambda-runtime-interface-emulator/blob/5a79e1e82cf701cff870ae7d665523fb356e6c47/lambda/core/directinvoke/customerheaders.go#L15

I dug into codes, and found aws-lambda-rie seems not to add client context to a invoke payload: https://github.com/aws/aws-lambda-runtime-interface-emulator/blob/5a79e1e82cf701cff870ae7d665523fb356e6c47/cmd/aws-lambda-rie/handlers.go#L96-L103

So, is there any ways to use custom client context with aws-lambda-rie? Should I send a pull request for this? It seems that Lambda-Runtime-Client-Context header is related to this, but I cannot find a way to use it properly.

Environment: I'm using aws-lambda-rie command in public.ecr.aws/lambda/nodejs:18.2022.12.02.19 image (https://gallery.ecr.aws/lambda/nodejs). Locally, I confirmed my function implementation can receive event data by running curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}', but cannot receive client context by adding Lambda-Runtime-Client-Context header like -H 'Lambda-Runtime-Client-Context: { "foo":"bar" }'. On AWS, my function can receive custom client context.

nekketsuuu commented 1 year ago

I asked AWS Support and received an answer which says there is no ways to pass client context to my function, for now.

Alternatively, as a workaround, if it's possible to change function code, we can set client context in the code if no client context is given.

valerena commented 4 months ago

Still pending actual release with this feature. I'll keep it open until next release.

mcieno commented 3 months ago

@valerena when can we expect v1.19 to be available in public.ecr.aws/lambda/provided:al2 and public.ecr.aws/lambda/provided:al2023?

valerena commented 3 months ago

I reached out to the team in charge of maintaining those images. We'll see what they say

valerena commented 2 months ago

The images with the new version of RIE were released and are available (https://gallery.ecr.aws/lambda/provided and also in other runtimes).