Skip to content

Error when using AWS_LAMBDA_EXEC_WRAPPER '/opt/otel-proxy-handler' #270

@msailes

Description

@msailes

I have a Lambda function with the following signature. These APIGateway classes represent the HTTP API version of API Gateway.

public class ApiGatewayGetAllProductRequestHandler implements RequestHandler<APIGatewayV2HTTPEvent, APIGatewayV2HTTPResponse> {

This causes an error with the OTEL Layer implementation using 'AWS_LAMBDA_EXEC_WRAPPER' = '/opt/otel-proxy-handler'

My Lambda function throws and error and doesn't complete and I get the following error message:

START RequestId: 0e4c8e0f-e0c9-49d0-83a9-43bdbb6a88ba Version: $LATEST
EXTENSION	Name: collector	State: Ready	Events: [INVOKE,SHUTDOWN]
2022/08/04 12:53:29 [collector] Received event: {
	"eventType": "INVOKE",
	"deadlineMs": 1659617612128,
	"requestId": "0e4c8e0f-e0c9-49d0-83a9-43bdbb6a88ba",
	"invokedFunctionArn": "arn:aws:lambda:eu-west-1:123456789012:function:JVMPerfTestStack-GetAllProductFunction9216DFAB-EAi3pX6W38xp",
	"tracing": {
		"type": "X-Amzn-Trace-Id",
		"value": "Root=1-62ebc144-782d1b5979d1d6b165c4873f;Parent=1a8f548170e20f69;Sampled=1"
	}
}
2022/08/04 12:53:29 [collector] Waiting for event...
2022-08-04T12:53:29.309Z	INFO	loggingexporter/logging_exporter.go:56	MetricsExporter	{"#metrics": 1}
Could not map API Gateway event body to requested parameter type: class com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent: java.lang.IllegalStateException
java.lang.IllegalStateException: Could not map API Gateway event body to requested parameter type: class com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent
	at io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestApiGatewayWrapper.map(TracingRequestApiGatewayWrapper.java:41)
	at io.opentelemetry.instrumentation.awslambdaevents.v2_2.LambdaParameters.toArray(LambdaParameters.java:24)
	at io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestWrapperBase.doHandleRequest(TracingRequestWrapperBase.java:63)
	at io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestApiGatewayWrapper.doHandleRequest(TracingRequestApiGatewayWrapper.java:49)
	at io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestApiGatewayWrapper.doHandleRequest(TracingRequestApiGatewayWrapper.java:21)
	at io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler.handleRequest(TracingRequestHandler.java:79)
Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'eyJ0ZXN0IjoiYm9keSJ9': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
 at [Source: (String)"eyJ0ZXN0IjoiYm9keSJ9"; line: 1, column: 21]
	at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2337)
	at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:720)
	at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2903)
	at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1949)
	at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:781)
	at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4684)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4586)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)
	at io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestApiGatewayWrapper.map(TracingRequestApiGatewayWrapper.java:39)
	... 5 more

END RequestId: 0e4c8e0f-e0c9-49d0-83a9-43bdbb6a88ba
REPORT RequestId: 0e4c8e0f-e0c9-49d0-83a9-43bdbb6a88ba	Duration: 257.58 ms	Billed Duration: 258 ms	Memory Size: 2048 MB	Max Memory Used: 211 MB	Init Duration: 4067.70 ms	
XRAY TraceId: 1-62ebc144-782d1b5979d1d6b165c4873f	SegmentId: 1a8f548170e20f69	Sampled: true	

The error comes from this line

https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/f236b2d4c9a0813b2dddf3d35928c79b21beb6d5/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestApiGatewayWrapper.java#L39

Where the code only expects 'APIGatewayProxyRequestEvent'. Other event objects will be used by customers and should be supported by the otel-proxy-handler.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions