Skip to content

Commit 8c8b717

Browse files
anahatAWSthpierceliustve
authored
Release/v2.11.3 (#1146)
*Description of changes:* Merges changes from mainline to v2.11.3 Namely: #1111 #1115 #1113 #1117 and #1120 Steps followed: 1. Fork `aws-otel-java-instrumentation` repo 2. Checkout `release/2.11.x` 3. Create branch `release/2.11.3` based off `release/2.11.x` (`git checkout -b release/2.11.3`) 4. `git cherry-pick 572215e ac3c0c7 9a76dda 8a3b772 25b2cd8` 5. Resolved merge conflict for 25b2cd8 6. run `./gradlew dependencyUpdates` 7. Create PR ``` The following dependencies are using the latest release version: - com.sparkjava:spark-core:2.9.4 - io.opentelemetry:opentelemetry-extension-aws:1.20.1 The following dependencies have later release versions: - com.amazonaws:aws-java-sdk-bom [1.12.599 -> 1.12.788] https://aws.amazon.com/sdkforjava - com.fasterxml.jackson:jackson-bom [2.16.0 -> 2.19.2] https://github.com/FasterXML/jackson-bom - com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin [0.50.0 -> 0.52.0] - com.google.guava:guava-bom [33.0.0-jre -> 33.4.8-jre] https://github.com/google/guava - com.google.protobuf:protobuf-bom [3.25.1 -> 4.31.1] https://developers.google.com/protocol-buffers/ - com.linecorp.armeria:armeria-bom [1.26.4 -> 1.33.1] https://armeria.dev/ - com.squareup.okhttp3:okhttp [4.12.0 -> 5.1.0] https://square.github.io/okhttp/ - commons-logging:commons-logging [1.2 -> 1.3.5] https://commons.apache.org/proper/commons-logging/ - io.grpc:grpc-bom [1.59.1 -> 1.74.0] https://github.com/grpc/grpc-java - io.opentelemetry.contrib:opentelemetry-aws-resources [1.39.0-alpha -> 1.48.0-alpha] https://github.com/open-telemetry/opentelemetry-java-contrib - io.opentelemetry.contrib:opentelemetry-aws-xray [1.39.0-adot1 -> 1.48.0] https://github.com/open-telemetry/opentelemetry-java-contrib - io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha [2.11.0-alpha -> 2.18.1-alpha] https://github.com/open-telemetry/opentelemetry-java-instrumentation - io.opentelemetry.javaagent:opentelemetry-javaagent [2.11.0 -> 2.18.1] https://github.com/open-telemetry/opentelemetry-java-instrumentation - io.opentelemetry.proto:opentelemetry-proto [1.0.0-alpha -> 1.7.0-alpha] https://github.com/open-telemetry/opentelemetry-proto-java - net.bytebuddy:byte-buddy [1.14.10 -> 1.17.6] https://bytebuddy.net - org.apache.logging.log4j:log4j-bom [2.21.1 -> 2.25.1] https://logging.apache.org/log4j/2.x/ - org.assertj:assertj-core [3.24.2 -> 3.27.4] https://assertj.github.io/doc/#assertj-core - org.curioswitch.curiostack:protobuf-jackson [2.2.0 -> 2.8.1] https://github.com/curioswitch/protobuf-jackson - org.junit:junit-bom [5.10.1 -> 5.13.4] https://junit.org/ - org.slf4j:slf4j-api [1.7.36 -> 2.0.17] http://www.slf4j.org - org.slf4j:slf4j-simple [1.7.36 -> 2.0.17] http://www.slf4j.org - org.springframework.boot:spring-boot-dependencies [2.7.17 -> 3.5.4] https://spring.io/projects/spring-boot - org.testcontainers:testcontainers-bom [1.19.3 -> 1.21.3] https://java.testcontainers.org - software.amazon.awssdk:bom [2.30.17 -> 2.32.22] https://aws.amazon.com/sdkforjava Gradle release-candidate updates: - Gradle: [8.10 -> 9.0.0 -> 9.1.0-rc-1] ``` By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. --------- Co-authored-by: Thomas Pierce <[email protected]> Co-authored-by: Steve Liu <[email protected]>
1 parent 7fc3bf1 commit 8c8b717

File tree

40 files changed

+4143
-4265
lines changed

40 files changed

+4143
-4265
lines changed

.github/actions/patch-dependencies/action.yml

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: "Patch dependencies"
22
description: |
33
Patches direct dependencies of this project leveraging maven local to publish the results.
44
5-
This workflow supports patching opentelemetry-java and opentelemetry-java-instrumentation repositories by executing
5+
This workflow supports patching opentelemetry-java and opentelemetry-java-contrib repositories by executing
66
the `patch.sh` script that will try to patch those repositories and after that will optionally test and then publish
77
the artifacts to maven local.
88
To add a patch you have to add a file in the `.github/patches/` directory with the name of the repository that must
@@ -49,9 +49,6 @@ runs:
4949
if [[ -f .github/patches/opentelemetry-java.patch ]]; then
5050
echo 'patch_otel_java=true' >> $GITHUB_ENV
5151
fi
52-
if [[ -f .github/patches/opentelemetry-java-instrumentation.patch ]]; then
53-
echo 'patch_otel_java_instrumentation=true' >> $GITHUB_ENV
54-
fi
5552
if [[ -f .github/patches/opentelemetry-java-contrib.patch ]]; then
5653
echo 'patch_otel_java_contrib=true' >> $GITHUB_ENV
5754
fi
@@ -60,7 +57,6 @@ runs:
6057
- name: Clone and patch repositories
6158
run: .github/scripts/patch.sh
6259
if: ${{ env.patch_otel_java == 'true' ||
63-
env.patch_otel_java_instrumentation == 'true' ||
6460
env.patch_otel_java_contrib == 'true' }}
6561
shell: bash
6662

@@ -101,22 +97,3 @@ runs:
10197
run: rm -rf opentelemetry-java-contrib
10298
if: ${{ env.patch_otel_java_contrib == 'true' }}
10399
shell: bash
104-
105-
- name: Build opentelemetry-java-instrumentation with tests
106-
uses: gradle/gradle-build-action@v2
107-
if: ${{ env.patch_otel_java_instrumentation == 'true' && inputs.run_tests != 'false' }}
108-
with:
109-
arguments: check -x spotlessCheck publishToMavenLocal
110-
build-root-directory: opentelemetry-java-instrumentation
111-
112-
- name: Build opentelemetry java instrumentation
113-
uses: gradle/gradle-build-action@v2
114-
if: ${{ env.patch_otel_java_instrumentation == 'true' && inputs.run_tests == 'false' }}
115-
with:
116-
arguments: publishToMavenLocal
117-
build-root-directory: opentelemetry-java-instrumentation
118-
119-
- name: cleanup opentelmetry-java-instrumentation
120-
run: rm -rf opentelemetry-java-instrumentation
121-
if: ${{ env.patch_otel_java_instrumentation == 'true' }}
122-
shell: bash

.github/patches/opentelemetry-java-instrumentation.patch

Lines changed: 0 additions & 4193 deletions
This file was deleted.

.github/scripts/patch.sh

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ set -x -e -u
66
# This is used so that we can properly clone the upstream repositories.
77
# This file should define the following variables:
88
# OTEL_JAVA_VERSION. Tag of the opentelemetry-java repository to use. E.g.: JAVA_OTEL_JAVA_VERSION=v1.21.0
9-
# OTEL_JAVA_INSTRUMENTATION_VERSION. Tag of the opentelemetry-java-instrumentation repository to use, e.g.: OTEL_JAVA_INSTRUMENTATION_VERSION=v1.21.0
109
# OTEL_JAVA_CONTRIB_VERSION. Tag of the opentelemetry-java-contrib repository. E.g.: OTEL_JAVA_CONTRIB_VERSION=v1.21.0
1110
# This script will fail if a variable that is supposed to exist is referenced.
1211

@@ -45,16 +44,3 @@ if [[ -f "$OTEL_JAVA_CONTRIB_PATCH" ]]; then
4544
else
4645
echo "Skipping patching opentelemetry-java-contrib"
4746
fi
48-
49-
50-
OTEL_JAVA_INSTRUMENTATION_PATCH=".github/patches/opentelemetry-java-instrumentation.patch"
51-
if [[ -f "$OTEL_JAVA_INSTRUMENTATION_PATCH" ]]; then
52-
git clone https://github.com/open-telemetry/opentelemetry-java-instrumentation.git
53-
cd opentelemetry-java-instrumentation
54-
git checkout ${OTEL_JAVA_INSTRUMENTATION_VERSION} -b tag-${OTEL_JAVA_INSTRUMENTATION_VERSION}
55-
patch -p1 < "../${OTEL_JAVA_INSTRUMENTATION_PATCH}"
56-
git commit -a -m "ADOT Patch release"
57-
cd -
58-
else
59-
echo "Skipping patching opentelemetry-java-instrumentation"
60-
fi

dependencyManagement/build.gradle.kts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ data class DependencySet(val group: String, val version: String, val modules: Li
2727
val testSnapshots = rootProject.findProperty("testUpstreamSnapshots") == "true"
2828

2929
// This is the version of the upstream instrumentation BOM
30-
val otelVersion = "2.11.0-adot3"
30+
val otelVersion = "2.11.0"
3131
val otelSnapshotVersion = "2.12.0"
3232
val otelAlphaVersion = if (!testSnapshots) "$otelVersion-alpha" else "$otelSnapshotVersion-alpha-SNAPSHOT"
3333
val otelJavaAgentVersion = if (!testSnapshots) otelVersion else "$otelSnapshotVersion-SNAPSHOT"
@@ -40,6 +40,9 @@ val dependencyBoms = listOf(
4040
"com.google.protobuf:protobuf-bom:3.25.1",
4141
"com.linecorp.armeria:armeria-bom:1.26.4",
4242
"io.grpc:grpc-bom:1.59.1",
43+
// netty-bom is a fix for CVE-2025-55163 (https://github.com/advisories/GHSA-prj3-ccx8-p6x4).
44+
// Remove once https://github.com/aws/aws-sdk-java-v2/pull/6344 is released.
45+
"io.netty:netty-bom:4.1.124.Final",
4346
"io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:$otelAlphaVersion",
4447
"org.apache.logging.log4j:log4j-bom:2.21.1",
4548
"org.junit:junit-bom:5.10.1",

instrumentation/aws-sdk/README.md

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
## ADOT AWS SDK Instrumentation
2+
3+
### Overview
4+
The aws-sdk instrumentation is an SPI-based implementation that extends the upstream OpenTelemetry AWS Java SDK instrumentation.
5+
6+
##### _v1.11 Initialization Workflow_
7+
1. OpenTelemetry Agent Starts
8+
- Loads default instrumentations
9+
- Loads aws-sdk v1.11 instrumentations
10+
- Injects **TracingRequestHandler** into constructor
11+
2. Scans for other SPI implementations
12+
- Finds ADOT’s **AdotAwsSdkInstrumentationModule**
13+
- Injects code that:
14+
- Checks for TracingRequestHandler
15+
- If present, adds **AdotAwsSdkTracingRequestHandler**
16+
3. AWS SDK Client Created
17+
- Constructor runs with injected code:
18+
[AWS Handlers] → TracingRequestHandler → AdotAwsSdkTracingRequestHandler
19+
20+
##### _v2.2 Initialization Workflow_
21+
22+
1. OpenTelemetry Agent starts
23+
- Loads default instrumentations
24+
- Loads aws-sdk instrumentation from opentelemetry-java-instrumentation
25+
- Registers **TracingExecutionInterceptor** (order = 0)
26+
2. Scans for other SPI implementations
27+
- Finds ADOT’s **AdotAwsSdkInstrumentationModule**
28+
- Registers **AdotAwsSdkTracingExecutionInterceptor** (order > 0)
29+
30+
#### _Note on Attribute Collection:_
31+
AWS SDK v1.11 and v2.2 handle attribute collection differently:
32+
33+
**V1.11:**
34+
- Maintains a separate AttributesBuilder during request/response lifecycle
35+
- Collects ADOT-specific attributes alongside upstream processing without interference
36+
- Injects collected attributes into span at the end of the request and response lifecycle hooks
37+
38+
39+
**V2.2:**
40+
- FieldMapper directly modifies spans during request/response processing
41+
- Attributes are added to spans immediately when discovered
42+
- Direct integration with span lifecycle
43+
44+
This architectural difference exists due to upstream AWS SDK injecting attributes into spans differently for v1.11 and v2.2
45+
46+
### AWS SDK v1 Instrumentation Summary
47+
The AdotAwsSdkInstrumentationModule uses the instrumentation (specified in AdotAwsClientInstrumentation) to register the AdotAwsSdkTracingRequestHandler through `typeInstrumentations`.
48+
49+
Key aspects of handler registration:
50+
- `order` method ensures ADOT instrumentation runs after OpenTelemetry's base instrumentation. It is set to the max integer value, as precaution, in case upstream aws-sdk registers more handlers.
51+
- `AdotAwsSdkClientInstrumentation` class adds ADOT handler to list of request handlers
52+
53+
**AdotAwsSdkClientInstrumentation**
54+
55+
AWS SDK v1.11 instrumentation requires ByteBuddy because, unlike v2.2, it doesn't provide an SPI for adding request handlers. While v2.2 uses the ExecutionInterceptor interface and Java's ServiceLoader mechanism, v1.11 maintains a direct list of handlers that can't be modified through a public API. Therefore, we use ByteBuddy to modify the AWS client constructor and inject our handler directly into the requestHandler2s list.
56+
57+
- `AdotAwsSdkClientAdvice` registers our handler only if the upstream aws-sdk span is enabled (i.e. it checks if the upstream handler is present when an AWS SDK client is
58+
initialized).
59+
- Ensures the OpenTelemetry handler is registered first.
60+
61+
**AdotAwsSdkTracingRequestHandler**
62+
63+
The AdotAwsSdkTracingRequestHandler hooks onto OpenTelemetry's spans during specific phases of the SDK request and response life cycle. These hooks are strategically chosen to ensure proper ordering of attribute injection.
64+
65+
1. `beforeRequest`: the latest point where the SDK request can be obtained after it is modified by the upstream aws-sdk v1.11 handler
66+
2. `afterAttempt`: the latest point to access the SDK response before the span closes in the upstream afterResponse/afterError methods
67+
- _NOTE:_ We use afterAttempt not because it's ideal, but because it our last chance to add attributes, even though this means our logic runs multiple times during retries.
68+
- This is a trade-off:
69+
- We get to add our attributes before span closure
70+
- But our code runs redundantly on each retry attempt
71+
- We're constrained by when upstream closes the span
72+
73+
All the span lifecycle hooks provided by AWS SDK RequestHandler2 can be found [here.](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/handlers/RequestHandler2.html#beforeMarshalling-com.amazonaws.AmazonWebServiceRequest)
74+
75+
_**Important Notes:**_
76+
- The upstream interceptor's last point of request modification occurs in [beforeRequest](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/TracingRequestHandler.java#L58).
77+
- The upstream interceptor closes the span in [afterResponse](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/TracingRequestHandler.java#L116) and/or [afterError](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/TracingRequestHandler.java#L131). These hooks are inaccessible for span modification.
78+
`afterAttempt` is our final hook point, giving us access to both the fully processed response and active span.
79+
80+
**High-Level Sequence Diagram:**
81+
![img.png](sequence-diagram-1.11.png)
82+
83+
_Class Functionalities:_
84+
- `AdotAwsSdkTracingRequestHandler`
85+
- Hooks into AWS SDK request/response lifecycle
86+
- Adds ADOT-specific attributes to spans extracted by AwsSdkExperimentalAttributesExtractor
87+
- `AwsSdkExperimentalAttributesExtractor`
88+
- Extracts attributes from AWS requests/responses and enriches spans
89+
- Uses RequestAccess to get field values
90+
- Special handling for Bedrock services
91+
- `RequestAccess`
92+
- Provides access to AWS SDK object fields
93+
- Caches method handles for performance
94+
- Uses BedrockJsonParser for parsing LLM payloads
95+
- `BedrockJsonParser`
96+
- Custom JSON parser for Bedrock payloads
97+
- Handles different LLM model formats
98+
- `AwsBedrockResourceType`
99+
- Maps Bedrock class names to resource types
100+
- Provides attribute keys and accessors for each type
101+
102+
### AWS SDK v2 Instrumentation Summary
103+
104+
**AdotAwsSdkInstrumentationModule**
105+
106+
The AdotAwsSdkInstrumentationModule registers the AdotAwsSdkTracingExecutionInterceptor in `registerHelperResources`.
107+
108+
Key aspects of interceptor registration:
109+
- AWS SDK's ExecutionInterceptor loads global interceptors from files named '/software/amazon/awssdk/global/handlers/execution.interceptors' in the classpath
110+
- Interceptors are executed in the order they appear in the classpath - earlier entries run first
111+
- `order` method ensures ADOT instrumentation runs after OpenTelemetry's base instrumentation, maintaining proper sequence of interceptor registration in AWS SDK classpath
112+
113+
**AdotAwsSdkTracingExecutionInterceptor**
114+
115+
The AdotAwsSdkTracingExecutionInterceptor hooks onto OpenTelemetry's spans during specific phases of the SDK request and response life cycle. These hooks are strategically chosen to ensure proper ordering of attribute injection.
116+
117+
1. `beforeTransmission`: the latest point where the SDK request can be obtained after it is modified by the upstream's interceptor
118+
2. `modifyResponse`: the latest point to access the SDK response before the span closes in the upstream afterExecution method
119+
120+
All the span lifecycle hooks provided by AWS SDK ExecutionInterceptor can be found [here.](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/interceptor/ExecutionInterceptor.html)
121+
122+
_**Important Notes:**_
123+
- The upstream interceptor's last point of request modification occurs in [beforeTransmission](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/release/v2.11.x/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/TracingExecutionInterceptor.java#L237).
124+
- The upstream interceptor closes the span in [afterExecution](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/release/v2.11.x/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/TracingExecutionInterceptor.java#L348). That hook is inaccessible for span modification.
125+
`modifyResponse` is our final hook point, giving us access to both the fully processed response and active span.
126+
127+
**High-Level Sequence Diagram:**
128+
![img.png](sequence-diagram-2.2.png)
129+
130+
_Class Functionalities:_
131+
- `AdotAwsSdkTracingExecutionInterceptor`
132+
- Intercepts AWS SDK calls to create and enrich OpenTelemetry spans with AWS attributes
133+
- Coordinates the attribute mapping process
134+
- `FieldMapper`
135+
- Maps the AWS SDK fields to span attributes
136+
- Coordinates with Serializer for value conversion
137+
- `FieldMapping`
138+
- Defines what fields to map from SDK to spans
139+
- Groups mappings by type (REQUEST/RESPONSE)
140+
- `MethodHandleFacotry`
141+
- Provides fast, cached access to AWS SDK object fields for better performance
142+
- Used by FieldMapper for efficient field value extraction
143+
- `Serializer`
144+
- Converts AWS SDK objects and Bedrock objects into string values that can be used as span attributes
145+
- Works with BedrockJsonParser for LLM responses
146+
- `AwsJsonProtocolFactoryAccess`
147+
- Enables access to AWS SDK's internal JSON serialization capabilities for complex SDK objects
148+
- Uses reflection to access internal SDK classes
149+
- Caches method handles for performance
150+
- `BedrockJasonParser`
151+
- Parses and extracts specific attributes from Bedrock LLM responses for GenAI telemetry
152+
153+
### Commands for Running Groovy Tests
154+
155+
#### aws-sdk v1.11
156+
To run the `BedrockJsonParserTest`:
157+
````
158+
./gradlew :instrumentation:aws-sdk:test --tests "software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v1_11.BedrockJsonParserTest"
159+
````
160+
161+
#### aws-sdk v2.2
162+
To run the `BedrockJsonParserTest`:
163+
````
164+
./gradlew :instrumentation:aws-sdk:test --tests "software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.BedrockJsonParserTest"
165+
````
166+
167+
### Commands for Running Java Tests
168+
169+
#### aws-sdk v1.11
170+
To run the `AwsSdkExperimentalAttributesInjectionTest`:
171+
````
172+
./gradlew :instrumentation:aws-sdk:test --tests "software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v1_11.AwsSdkExperimentalAttributesInjectionTest"
173+
````
174+
175+
To run the `AdotAwsSdkClientAdviceTest`:
176+
````
177+
./gradlew :instrumentation:aws-sdk:test --tests "software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v1_11.AdotAwsSdkClientAdviceTest"
178+
````
179+
180+
#### aws-sdk v2.2
181+
To run the `AwsSdkExperimentalAttributesInjectionTest`:
182+
````
183+
./gradlew :instrumentation:aws-sdk:test --tests "software.amazon.opentelemetry.javaagent.instrumentation.awssdk_v2_2.AwsSdkExperimentalAttributesInjectionTest"
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
plugins {
17+
java
18+
id("com.gradleup.shadow")
19+
id("groovy")
20+
}
21+
22+
base.archivesBaseName = "aws-instrumentation-aws-sdk"
23+
24+
dependencies {
25+
compileOnly("com.google.code.findbugs:jsr305:3.0.2")
26+
compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api")
27+
compileOnly("io.opentelemetry.instrumentation:opentelemetry-instrumentation-api")
28+
compileOnly("com.amazonaws:aws-java-sdk-core:1.11.0")
29+
compileOnly("software.amazon.awssdk:aws-core:2.2.0")
30+
compileOnly("software.amazon.awssdk:aws-json-protocol:2.2.0")
31+
compileOnly("net.bytebuddy:byte-buddy")
32+
33+
testImplementation("com.google.guava:guava")
34+
testImplementation("org.mockito:mockito-core:5.14.2")
35+
testImplementation("io.opentelemetry.javaagent:opentelemetry-testing-common")
36+
testImplementation("io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api")
37+
38+
testImplementation("software.amazon.awssdk:aws-core:2.2.0")
39+
testImplementation("com.amazonaws:aws-java-sdk-lambda:1.11.678")
40+
testImplementation("com.amazonaws:aws-java-sdk-kinesis:1.11.106")
41+
testImplementation("com.amazonaws:aws-java-sdk-sns:1.11.106")
42+
testImplementation("com.amazonaws:aws-java-sdk-stepfunctions:1.11.230")
43+
testImplementation("com.amazonaws:aws-java-sdk-secretsmanager:1.11.309")
44+
}
75 KB
Loading
115 KB
Loading

0 commit comments

Comments
 (0)