@@ -642,4 +642,90 @@ index cc1414c0bf..db8a59b046 100644
642642+ val alphaVersion = "1.33.6-adot-lambda1-alpha"
643643
644644 allprojects {
645- if (findProperty("otel.stable") != "true") {
645+ if (findProperty("otel.stable") != "true") {
646+ diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java
647+ index 2332f24a8f..0743cdea75 100644
648+ --- a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java
649+ +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java
650+ @@ -10,7 +10,9 @@ import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.
651+ import static io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0.AwsLambdaInstrumentationHelper.functionInstrumenter;
652+ import static net.bytebuddy.matcher.ElementMatchers.isMethod;
653+ import static net.bytebuddy.matcher.ElementMatchers.isPublic;
654+ + import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
655+ import static net.bytebuddy.matcher.ElementMatchers.named;
656+ + import static net.bytebuddy.matcher.ElementMatchers.not;
657+ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
658+
659+ import com.amazonaws.services.lambda.runtime.Context;
660+ @@ -35,7 +37,8 @@ public class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentati
661+
662+ @Override
663+ public ElementMatcher<TypeDescription> typeMatcher() {
664+ - return implementsInterface(named("com.amazonaws.services.lambda.runtime.RequestHandler"));
665+ + return implementsInterface(named("com.amazonaws.services.lambda.runtime.RequestHandler"))
666+ + .and(not(nameStartsWith("com.amazonaws.services.lambda.runtime.api.client")));
667+ }
668+
669+ @Override
670+ diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java
671+ index af939fcb6d..8b8398950a 100644
672+ --- a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java
673+ +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java
674+ @@ -5,14 +5,19 @@
675+
676+ package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0;
677+
678+ + import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
679+ import static org.assertj.core.api.Assertions.assertThat;
680+
681+ import com.amazonaws.services.lambda.runtime.Context;
682+ import com.amazonaws.services.lambda.runtime.RequestHandler;
683+ + import com.amazonaws.services.lambda.runtime.api.client.AwsLambdaInternalRequestHandler;
684+ + import io.opentelemetry.api.trace.SpanKind;
685+ import io.opentelemetry.instrumentation.awslambdacore.v1_0.AbstractAwsLambdaTest;
686+ import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
687+ import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
688+ + import io.opentelemetry.semconv.SemanticAttributes;
689+ import org.junit.jupiter.api.AfterEach;
690+ + import org.junit.jupiter.api.Test;
691+ import org.junit.jupiter.api.extension.RegisterExtension;
692+
693+ public class AwsLambdaTest extends AbstractAwsLambdaTest {
694+ @@ -35,6 +40,22 @@ public class AwsLambdaTest extends AbstractAwsLambdaTest {
695+ assertThat(testing.forceFlushCalled()).isTrue();
696+ }
697+
698+ + @Test
699+ + void awsLambdaInternalHandlerIgnoredAndUserHandlerTraced() {
700+ + RequestHandler<String, String> handler = new AwsLambdaInternalRequestHandler(handler());
701+ + String result = handler.handleRequest("hello", context());
702+ + assertThat(result).isEqualTo("world");
703+ + testing()
704+ + .waitAndAssertTraces(
705+ + trace ->
706+ + trace.hasSpansSatisfyingExactly(
707+ + span ->
708+ + span.hasName("my_function")
709+ + .hasKind(SpanKind.SERVER)
710+ + .hasAttributesSatisfyingExactly(
711+ + equalTo(SemanticAttributes.FAAS_INVOCATION_ID, "1-22-333"))));
712+ + }
713+ +
714+ private static final class TestRequestHandler implements RequestHandler<String, String> {
715+
716+ @Override
717+ diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java
718+ index 94a85244e2..25a32896aa 100644
719+ --- a/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java
720+ +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java
721+ @@ -53,6 +53,10 @@ public abstract class AbstractAwsLambdaTest {
722+ assertThat(testing().forceFlushCalled()).isTrue();
723+ }
724+
725+ + protected Context context() {
726+ + return context;
727+ + }
728+ +
729+ @Test
730+ void handlerTraced() {
731+ String result = handler().handleRequest("hello", context);
0 commit comments