@@ -51,19 +51,19 @@ func main() {
5151 os .Exit (2 )
5252 }
5353
54- // OpenTelemetry is always active, but traces are only exported to AWS X-Ray
55- // (and charged for usage) if enabled in the environment.
56- tp := initTracerProvider (ctx , logger )
57- otel .SetTracerProvider (tp )
58- if xrayTracingEnabled {
54+ var otellambdaOptions []otellambda.Option
55+ if xrayTracerProviderEnabled {
56+ tp := initXRayTracerProvider (ctx , logger )
57+ otel .SetTracerProvider (tp )
5958 otel .SetTextMapPropagator (xraypropagator.Propagator {})
59+ otellambdaOptions = xrayconfig .WithRecommendedOptions (tp )
60+ defer func () {
61+ err := tp .Shutdown (ctx )
62+ if err != nil {
63+ logger .Warn ("Failed to shut down tracer provider" , "err" , err )
64+ }
65+ }()
6066 }
61- defer func () {
62- err := tp .Shutdown (ctx )
63- if err != nil {
64- logger .Warn ("Failed to shut down tracer provider" , "err" , err )
65- }
66- }()
6767
6868 app := slack.App {
6969 TokenProvider : tokenProvider ,
@@ -72,19 +72,19 @@ func main() {
7272 }
7373 httpHandler := otelhttp .NewHandler (app , "/" )
7474 adapterHandler := httpadapter .NewV2 (httpHandler ).ProxyWithContext
75- parentHandler := otellambda .InstrumentHandler (adapterHandler , xrayconfig . WithRecommendedOptions ( tp ) ... )
75+ parentHandler := otellambda .InstrumentHandler (adapterHandler , otellambdaOptions ... )
7676 lambda .Start (parentHandler )
7777}
7878
79- var xrayTracingEnabled = os .Getenv ("AWS_XRAY_TRACING_ENABLED" ) == "1"
79+ // xrayTracerProviderEnabled indicates whether we should manually configure
80+ // OpenTelemetry to export spans to Lambda's X-Ray UDP collector. This could be
81+ // disabled if we don't want X-Ray tracing at all, or if we're configuring the
82+ // Auto SDK via eBPF (e.g. ADOT Lambda layers).
83+ var xrayTracerProviderEnabled = os .Getenv ("AWS_XRAY_TRACER_PROVIDER_ENABLED" ) == "1"
8084
81- func initTracerProvider (ctx context.Context , logger * slog.Logger ) * trace.TracerProvider {
82- traceResource := initTraceResource (ctx , logger )
83- tp := trace .NewTracerProvider (trace .WithResource (traceResource ))
84-
85- if ! xrayTracingEnabled {
86- return tp
87- }
85+ func initXRayTracerProvider (ctx context.Context , logger * slog.Logger ) * trace.TracerProvider {
86+ tp := trace .NewTracerProvider (
87+ trace .WithResource (initTraceResource (ctx , logger )))
8888
8989 exporter , err := xrayudp .NewSpanExporter (ctx )
9090 if err != nil {
@@ -101,10 +101,6 @@ func initTraceResource(ctx context.Context, logger *slog.Logger) *resource.Resou
101101 semconv .SchemaURL ,
102102 semconv .ServiceName (os .Getenv ("AWS_LAMBDA_FUNCTION_NAME" )))
103103
104- if ! xrayTracingEnabled {
105- return baseResource
106- }
107-
108104 lambdaResource , err := lambdadetector .NewResourceDetector ().Detect (ctx )
109105 if err != nil {
110106 logger .Warn ("Skipping Lambda resources in traces" , "err" , err , "step" , "detect" )
0 commit comments