Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
OpenTelemetry Migrazione a Java
Questa sezione fornisce indicazioni sulla migrazione dall'SDK X-Ray all'SDK per le applicazioni SDK OpenTelemetry for Java.
Soluzione di strumentazione automatica a codice zero
- With X-Ray Java agent
-
Per abilitare l'agente X-Ray Java, era necessario modificare gli argomenti JVM dell'applicazione.
-javaagent:/path-to-disco
/disco-java-agent.jar=pluginPath=/path-to-disco
/disco-plugins
- With OpenTelemetry-based Java agent
-
Per utilizzare agenti Java OpenTelemetry basati.
-
Utilizzate l'agente Java AWS Distro for OpenTelemetry (ADOT) Auto-Instrumentation per la strumentazione automatica con l'agente Java ADOT. Per ulteriori informazioni, vedete Auto-Instrumentation for Traces and Metrics with the Java agent. Se desideri solo tracciare, disabilita la variabile di OTEL_METRICS_EXPORTER=none
ambiente per esportare le metriche dall'agente Java.
(Facoltativo) È inoltre possibile abilitare CloudWatch Application Signals durante la strumentazione automatica delle applicazioni AWS con la strumentazione automatica ADOT Java per monitorare lo stato attuale delle applicazioni e tenere traccia delle prestazioni delle applicazioni a lungo termine. Application Signals offre una visione unificata e incentrata sulle applicazioni delle applicazioni, dei servizi e delle dipendenze e aiuta a monitorare e valutare lo stato delle applicazioni. Per ulteriori informazioni, consulta Application Signals.
-
Utilizzate l'agente Java per la strumentazione automatica. OpenTelemetry Per ulteriori informazioni, vedete Strumentazione a codice zero con Java Agent.
Soluzioni di strumentazione manuale con SDK
- Tracing setup with X-Ray SDK
-
Per strumentare il codice con X-Ray SDK for Java, prima era necessario configurare la AWSXRay
classe con plug-in di servizio e regole di campionamento locali, quindi è stato utilizzato un registratore fornito.
static { AWS XRayRecorderBuilder builder = AWS XRayRecorderBuilder.standard().withPlugin(new EC2Plugin()).withPlugin(new ECSPlugin()); AWS XRay.setGlobalRecorder(builder.build());
}
- Tracing setup with OpenTelemetry SDK
-
Sono richieste le seguenti dipendenze.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-bom</artifactId>
<version>1.49.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-instrumentation-bom</artifactId>
<version>2.15.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry.semconv</groupId>
<artifactId>opentelemetry-semconv</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-aws-xray</artifactId>
<version>1.46.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-aws-xray-propagator</artifactId>
<version>1.46.0-alpha</version>
</dependency>
<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-aws-resources</artifactId>
<version>1.46.0-alpha</version>
</dependency>
</dependencies>
Configura l' OpenTelemetry SDK creando un'istanza TracerProvider
e registrando globalmente un oggetto. OpenTelemetrySdk
Configura questi componenti:
Un OTLP Span Exporter (ad esempio, OtlpGrpcSpanExporter): necessario per esportare le tracce verso l'agente o il raccoglitore CloudWatch OpenTelemetry
-
Un propagatore AWS a raggi X: necessario per propagare il Trace Context ai AWS servizi integrati con X-Ray
-
Un campionatore remoto AWS a raggi X: necessario se è necessario campionare le richieste utilizzando le regole di campionamento a raggi X
Resource Detectors (ad esempio, EcsResource o Ec2Resource): rilevano i metadati dell'host che esegue l'applicazione
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.contrib.aws.resource.Ec2Resource;
import io.opentelemetry.contrib.aws.resource.EcsResource;
import io.opentelemetry.contrib.awsxray.AwsXrayRemoteSampler;
import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
// ...
private static final Resource otelResource =
Resource.create(Attributes.of(SERVICE_NAME, "YOUR_SERVICE_NAME
"))
.merge(EcsResource.get())
.merge(Ec2Resource.get());
private static final SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.create(
OtlpGrpcSpanExporter.getDefault()
))
.addResource(otelResource)
.setSampler(Sampler.parentBased(
AwsXrayRemoteSampler.newBuilder(otelResource).build()
))
.build();
// Globally registering a TracerProvider makes it available throughout the application to create as many Tracers as needed.
private static final OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setTracerProvider(sdkTracerProvider)
.setPropagators(ContextPropagators.create(AwsXrayPropagator.getInstance()))
.buildAndRegisterGlobal();
Tracciamento delle richieste in arrivo (strumentazione Spring Framework)
- With X-Ray SDK
-
Per informazioni su come utilizzare X-Ray SDK con il framework Spring per strumentare l'applicazione, consulta AOP with Spring e X-Ray SDK for Java. Per abilitare AOP in Spring, completa questi passaggi.
- With OpenTelemetry SDK
OpenTelemetry fornisce librerie di strumentazione per raccogliere tracce per le richieste in arrivo per le applicazioni Spring Boot. Per abilitare la strumentazione Spring Boot con una configurazione minima, includi la seguente dipendenza.
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-spring-boot-starter</artifactId>
</dependency>
Per ulteriori informazioni su come abilitare e configurare la strumentazione Spring Boot per la OpenTelemetry configurazione, vedere Guida introduttiva. OpenTelemetry
- Using OpenTelemetry-based Java agents
Il metodo predefinito consigliato per strumentare le applicazioni Spring Boot consiste nell'utilizzare l'agente OpenTelemetry Java con strumentazione bytecode, che fornisce anche più out-of-the-box strumentazioni e configurazioni rispetto all'utilizzo diretto dell'SDK. Soluzione di strumentazione automatica a codice zeroPer iniziare, consulta.
AWS Strumentazione SDK v2
- With X-Ray SDK
-
L'X-Ray SDK for Java è in grado di strumentare automaticamente tutti i client AWS SDK v2 quando aggiungi il sottomodulo nella build. aws-xray-recorder-sdk-aws-sdk-v2-instrumentor
Per strumentare le chiamate dei client a valle dei singoli client ai AWS servizi con AWS SDK for Java 2.2 e versioni successive, aws-xray-recorder-sdk-aws-sdk-v2-instrumentor
il modulo dalla configurazione di build è stato escluso e aws-xray-recorder-sdk-aws-sdk-v2
il modulo è stato incluso. I singoli client sono stati strumentati configurandoli con un. TracingInterceptor
import com.amazonaws.xray.interceptors.TracingInterceptor;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
//...
public class MyModel {
private DynamoDbClient client = DynamoDbClient.builder()
.region(Region.US_WEST_2)
.overrideConfiguration(
ClientOverrideConfiguration.builder()
.addExecutionInterceptor(new TracingInterceptor())
.build()
)
.build();
//...
- With OpenTelemetry SDK
-
Per strumentare automaticamente tutti i client AWS SDK, aggiungi il sottomodulo. opentelemetry-aws-sdk-2.2-autoconfigure
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-aws-sdk-2.2-autoconfigure</artifactId>
<version>2.15.0-alpha</version>
<scope>runtime</scope>
</dependency>
Per strumentare i singoli client AWS SDK, aggiungi il sottomodulo. opentelemetry-aws-sdk-2.2
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-aws-sdk-2.2</artifactId>
<version>2.15.0-alpha</version>
<scope>compile</scope>
</dependency>
Quindi, registra un interceptor durante la creazione di un client SDK. AWS
import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry;
// ...
AwsSdkTelemetry telemetry = AwsSdkTelemetry.create(openTelemetry);
private final S3Client S3_CLIENT = S3Client.builder()
.overrideConfiguration(ClientOverrideConfiguration.builder()
.addExecutionInterceptor(telemetry.newExecutionInterceptor())
.build())
.build();
Analisi delle chiamate HTTP in uscita
- With X-Ray SDK
-
Per strumentare le richieste HTTP in uscita con X-Ray, era necessario l'X-Ray SDK per la versione di Apache di Java. HttpClient
import com.amazonaws.xray.proxies.apache.http.HttpClientBuilder;
...
public String randomName() throws IOException {
CloseableHttpClient httpclient = HttpClientBuilder.create().build();
- With OpenTelemetry SDK
-
Analogamente a X-Ray Java SDK, OpenTelemetry fornisce una ApacheHttpClientTelemetry
classe con un metodo builder che consente la creazione di un'istanza di un set HttpClientBuilder
per fornire intervalli OpenTelemetry basati e propagazione del contesto per Apache. HttpClient
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-apache-httpclient-5.2</artifactId>
<version>2.15.0-alpha</version>
<scope>compile</scope>
</dependency>
Di seguito è riportato un esempio di codice tratto da. opentelemetry-java-instrumentation Il client HTTP fornito da newHttpClient () genererà tracce per le richieste eseguite.
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.apachehttpclient.v5_2.ApacheHttpClientTelemetry;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
public class ApacheHttpClientConfiguration {
private OpenTelemetry openTelemetry;
public ApacheHttpClientConfiguration(OpenTelemetry openTelemetry) {
this.openTelemetry = openTelemetry;
}
// creates a new http client builder for constructing http clients with open telemetry instrumentation
public HttpClientBuilder createBuilder() {
return ApacheHttpClientTelemetry.builder(openTelemetry).build().newHttpClientBuilder();
}
// creates a new http client with open telemetry instrumentation
public HttpClient newHttpClient() {
return ApacheHttpClientTelemetry.builder(openTelemetry).build().newHttpClient();
}
}
Supporto strumentale per altre librerie
Trova l'elenco completo delle strumentazioni di libreria supportate per OpenTelemetry Java nel rispettivo GitHub repository di strumentazione, in Librerie, framework, server di applicazioni supportati e. JVMs
In alternativa, puoi cercare nel OpenTelemetry Registro per scoprire se supporta la strumentazione. OpenTelemetry Per iniziare la ricerca, vedi Registro.
Creazione manuale dei dati di traccia
- With X-Ray SDK
-
Con X-Ray SDK, sono necessari i beginSubsegment
metodi beginSegment
and per creare manualmente segmenti e sottosegmenti X-Ray.
Segment segment = xrayRecorder.beginSegment("ManualSegment");
segment.putAnnotation("annotationKey", "annotationValue");
segment.putMetadata("metadataKey", "metadataValue");
try {
Subsegment subsegment = xrayRecorder.beginSubsegment("ManualSubsegment");
subsegment.putAnnotation("key", "value");
// Do something here
} catch (Exception e) {
subsegment.addException(e);
} finally {
xrayRecorder.endSegment();
}
- With OpenTelemetry SDK
È possibile utilizzare intervalli personalizzati per monitorare le prestazioni delle attività interne che non vengono acquisite dalle librerie di strumentazione. Nota che solo i server di tipo span vengono convertiti in segmenti X-Ray, tutti gli altri span vengono convertiti in sottosegmenti X-Ray.
Innanzitutto, è necessario creare un Tracer per generare intervalli, che è possibile ottenere tramite il metodo. openTelemetry.getTracer
Ciò fornirà un'istanza Tracer tra quelle registrate globalmente nell'esempio. TracerProvider
Soluzioni di strumentazione manuale con SDK È possibile creare tutte le istanze Tracer necessarie, ma è comune avere una sola istanza Tracer per un'intera applicazione.
Tracer tracer = openTelemetry.getTracer("my-app
");
È possibile utilizzare Tracer per creare intervalli.
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Scope;
...
// SERVER span will become an X-Ray segment
Span span = tracer.spanBuilder("get-token")
.setKind(SpanKind.SERVER)
.setAttribute("key", "value")
.startSpan();
try (Scope ignored = span.makeCurrent()) {
span.setAttribute("metadataKey", "metadataValue");
span.setAttribute("annotationKey", "annotationValue");
// The following ensures that "annotationKey: annotationValue" is an annotation in X-Ray raw data.
span.setAttribute(AttributeKey.stringArrayKey("aws.xray.annotations"), List.of("annotationKey"));
// Do something here
}
span.end();
Gli intervalli hanno un tipo predefinito di INTERNAL.
// Default span of type INTERNAL will become an X-Ray subsegment
Span span = tracer.spanBuilder("process-header")
.startSpan();
try (Scope ignored = span.makeCurrent()) {
doProcessHeader();
}
Aggiungere annotazioni e metadati alle tracce con SDK OpenTelemetry
Nell'esempio precedente, il setAttribute
metodo viene utilizzato per aggiungere attributi a ogni intervallo. Per impostazione predefinita, tutti gli attributi span verranno convertiti in metadati nei dati grezzi X-Ray. Per garantire che un attributo venga convertito in un'annotazione e non in metadati, l'esempio precedente aggiunge la chiave di quell'attributo all'elenco dell'attributo. aws.xray.annotations
Per ulteriori informazioni, consulta Abilitare le annotazioni e le annotazioni a raggi X personalizzate e i metadati.
Con agenti Java basati OpenTelemetry
Se si utilizza l'agente Java per strumentare automaticamente l'applicazione, è necessario eseguire la strumentazione manuale nell'applicazione. Ad esempio, al codice dello strumento all'interno dell'applicazione per sezioni che non sono coperte da alcuna libreria di strumentazione automatica.
Per eseguire la strumentazione manuale con l'agente, è necessario utilizzare l'artefatto. opentelemetry-api
La versione dell'artefatto non può essere più recente della versione dell'agente.
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.trace.Span;
// ...
Span parentSpan = Span.current();
Tracer tracer = GlobalOpenTelemetry.getTracer("my-app");
Span span = tracer.spanBuilder("my-span-name")
.setParent(io.opentelemetry.context.Context.current().with(parentSpan))
.startSpan();
span.end();
Strumentazione Lambda
- With X-Ray SDK
-
Utilizzando l'SDK X-Ray, dopo che Lambda ha abilitato l'Active Tracing, non è richiesta alcuna configurazione aggiuntiva per utilizzare l'SDK X-Ray. Lambda creerà un segmento che rappresenta l'invocazione del gestore Lambda e potrai creare sottosegmenti o librerie di strumenti utilizzando l'SDK X-Ray senza alcuna configurazione aggiuntiva.
- With OpenTelemetry-based solutions
Strumentazione automatica Lambda: puoi strumentare automaticamente la tua Lambda AWS con strati Lambda venduti utilizzando le seguenti soluzioni:
CloudWatch Segnali applicativi Lambda layer (consigliato)
Questo livello Lambda dispone di CloudWatch Application Signals abilitati per impostazione predefinita, il che consente il monitoraggio delle prestazioni e dello stato dell'applicazione Lambda raccogliendo sia metriche che tracce. Per il semplice tracciamento, imposta la variabile di ambiente Lambda. OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false
-
Consente il monitoraggio delle prestazioni e dello stato dell'applicazione Lambda
-
Per impostazione predefinita, raccoglie sia le metriche che le tracce
AWS layer Lambda gestito per ADOT Java. Per ulteriori informazioni, consulta AWS Distro for OpenTelemetry Lambda Support For Java.
Per utilizzare la strumentazione manuale insieme al livello di strumentazione automatica, vedere. Soluzioni di strumentazione manuale con SDK Per ridurre gli avviamenti a freddo, prendi in considerazione OpenTelemetry l'utilizzo di strumentazione manuale per generare OpenTelemetry tracce per la tua funzione Lambda.
OpenTelemetry strumentazione manuale per Lambda AWS
Considera il seguente codice di funzione Lambda che effettua una chiamata Amazon ListBuckets S3.
package example;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.ListBucketsRequest;
import software.amazon.awssdk.services.s3.model.ListBucketsResponse;
import software.amazon.awssdk.services.s3.model.S3Exception;
public class ListBucketsLambda implements RequestHandler<String, String> {
private final S3Client S3_CLIENT = S3Client.builder()
.build();
@Override
public String handleRequest(String input, Context context) {
try {
ListBucketsResponse response = makeListBucketsCall();
context.getLogger().log("response: " + response.toString());
return "Success";
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private ListBucketsResponse makeListBucketsCall() {
try {
ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder()
.build();
ListBucketsResponse response = S3_CLIENT.listBuckets(listBucketsRequest);
return response;
} catch (S3Exception e) {
throw new RuntimeException("Failed to call S3 listBuckets" + e.awsErrorDetails().errorMessage(), e);
}
}
}
Ecco le dipendenze.
dependencies {
implementation('com.amazonaws:aws-lambda-java-core:1.2.3')
implementation('software.amazon.awssdk:s3:2.28.29')
implementation('org.slf4j:slf4j-nop:2.0.16')
}
Per strumentare manualmente il tuo gestore Lambda e il client Amazon S3, procedi come segue.
Sostituisci le classi di funzioni che implementano RequestHandler
(o RequestStreamHandler) con quelle che estendono TracingRequestHandler
(o). TracingRequestStreamHandler
Crea un'istanza TracerProvider e registra globalmente un OpenTelemetrySdk oggetto. Si TracerProvider consiglia di configurarlo con:
Un Simple Span Processor con un X-Ray UDP Span Exporter per inviare tracce all'endpoint UDP X-Ray di Lambda
Un campionatore sempre attivo (predefinito se non configurato ParentBased )
Una risorsa con service.name impostato sul nome della funzione Lambda
Un propagatore Lambda a raggi X
Modificate il handleRequest
metodo doHandleRequest
e passate l'OpenTelemetrySdk
oggetto alla classe base.
Strumenta il client Amazon S3 con la strumentazione OpenTemetry AWS SDK registrando l'interceptor durante la creazione del client.
Sono OpenTelemetry necessarie le seguenti dipendenze correlate.
dependencies {
...
implementation("software.amazon.distro.opentelemetry:aws-distro-opentelemetry-xray-udp-span-exporter:0.1.0")
implementation(platform('io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.14.0'))
implementation(platform('io.opentelemetry:opentelemetry-bom:1.48.0'))
implementation('io.opentelemetry:opentelemetry-sdk')
implementation('io.opentelemetry:opentelemetry-api')
implementation('io.opentelemetry.contrib:opentelemetry-aws-xray-propagator:1.45.0-alpha')
implementation('io.opentelemetry.contrib:opentelemetry-aws-resources:1.45.0-alpha')
implementation('io.opentelemetry.instrumentation:opentelemetry-aws-lambda-core-1.0:2.14.0-alpha')
implementation('io.opentelemetry.instrumentation:opentelemetry-aws-sdk-2.2:2.14.0-alpha')
}
Il codice seguente illustra la funzione Lambda dopo le modifiche richieste. È possibile creare intervalli personalizzati aggiuntivi per completare gli intervalli forniti automaticamente.
package example;
import java.time.Duration;
import com.amazonaws.services.lambda.runtime.Context;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.contrib.aws.resource.LambdaResource;
import io.opentelemetry.contrib.awsxray.propagator.AwsXrayLambdaPropagator;
import io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler;
import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.ListBucketsRequest;
import software.amazon.awssdk.services.s3.model.ListBucketsResponse;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.distro.opentelemetry.exporter.xray.udp.trace.AwsXrayUdpSpanExporterBuilder;
public class ListBucketsLambda extends TracingRequestHandler<String, String> {
private static final Resource lambdaResource = LambdaResource.get();
private static final SdkTracerProvider sdkTracerProvider =
SdkTracerProvider.builder()
.addSpanProcessor(SimpleSpanProcessor.create(
new AwsXrayUdpSpanExporterBuilder().build()
))
.addResource(
lambdaResource
.merge(Resource.create(Attributes.of(SERVICE_NAME, System.getenv("AWS_LAMBDA_FUNCTION_NAME"))))
)
.setSampler(Sampler.parentBased(Sampler.alwaysOn()))
.build();
private static final OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setTracerProvider(sdkTracerProvider)
.setPropagators(ContextPropagators.create(AwsXrayLambdaPropagator.getInstance()))
.buildAndRegisterGlobal();
private static final AwsSdkTelemetry telemetry = AwsSdkTelemetry.create(openTelemetry);
private final S3Client S3_CLIENT = S3Client.builder()
.overrideConfiguration(ClientOverrideConfiguration.builder()
.addExecutionInterceptor(telemetry.newExecutionInterceptor())
.build())
.build();
public ListBucketsLambda() {
super(openTelemetry, Duration.ofMillis(0));
}
@Override
public String doHandleRequest(String input, Context context) {
try {
ListBucketsResponse response = makeListBucketsCall();
context.getLogger().log("response: " + response.toString());
return "Success";
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private ListBucketsResponse makeListBucketsCall() {
try {
ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder()
.build();
ListBucketsResponse response = S3_CLIENT.listBuckets(listBucketsRequest);
return response;
} catch (S3Exception e) {
throw new RuntimeException("Failed to call S3 listBuckets" + e.awsErrorDetails().errorMessage(), e);
}
}
}
Quando si richiama la funzione Lambda, verrà visualizzata la seguente traccia in Trace Map nella CloudWatch console.