in lambda/rpc_function.go [69:107]
func (fn *Function) Invoke(req *messages.InvokeRequest, response *messages.InvokeResponse) error {
defer func() {
if err := recover(); err != nil {
response.Error = lambdaPanicResponse(err)
}
}()
deadline := time.Unix(req.Deadline.Seconds, req.Deadline.Nanos).UTC()
invokeContext, cancel := context.WithDeadline(fn.baseContext(), deadline)
defer cancel()
lc := &lambdacontext.LambdaContext{
AwsRequestID: req.RequestId,
InvokedFunctionArn: req.InvokedFunctionArn,
Identity: lambdacontext.CognitoIdentity{
CognitoIdentityID: req.CognitoIdentityId,
CognitoIdentityPoolID: req.CognitoIdentityPoolId,
},
}
if len(req.ClientContext) > 0 {
if err := json.Unmarshal(req.ClientContext, &lc.ClientContext); err != nil {
response.Error = lambdaErrorResponse(err)
return nil
}
}
invokeContext = lambdacontext.NewContext(invokeContext, lc)
// nolint:staticcheck
invokeContext = context.WithValue(invokeContext, "x-amzn-trace-id", req.XAmznTraceId)
os.Setenv("_X_AMZN_TRACE_ID", req.XAmznTraceId)
payload, err := fn.handler.Invoke(invokeContext, req.Payload)
if err != nil {
response.Error = lambdaErrorResponse(err)
return nil
}
response.Payload = payload
return nil
}