aws/aws-lambda-runtime-interface-emulator

How to invoke a function with custom client context?

nekketsuuu opened this issue · 5 comments

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:

ClientContext string `json:"Client-Context"`

I dug into codes, and found aws-lambda-rie seems not to add client context to a invoke payload:

invokePayload := &interop.Invoke{
ID: uuid.New().String(),
InvokedFunctionArn: fmt.Sprintf("arn:aws:lambda:us-east-1:012345678912:function:%s", GetenvWithDefault("AWS_LAMBDA_FUNCTION_NAME", "test_function")),
TraceID: r.Header.Get("X-Amzn-Trace-Id"),
LambdaSegmentID: r.Header.Get("X-Amzn-Segment-Id"),
Payload: bytes.NewReader(bodyBytes),
CorrelationID: "invokeCorrelationID",
}

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.

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.

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

mcieno commented

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

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

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