lambda_otel_utils

Module http_otel_layer

Source
Expand description

This module provides an OpenTelemetry layer for HTTP-based AWS Lambda functions.

It includes utilities for tracing HTTP requests in Lambda functions triggered by API Gateway, ALB, or similar HTTP-based event sources. The module implements automatic context propagation and span creation for incoming HTTP requests.

§Examples

Here’s a complete example of how to use this module in an AWS Lambda function:

use lambda_runtime::{service_fn, Error, LambdaEvent};
use aws_lambda_events::event::apigw::ApiGatewayProxyRequest;
use serde_json::json;
use lambda_runtime::tower::ServiceBuilder;
use tracing::info;
use opentelemetry::global;
use opentelemetry_stdout::SpanExporter;
use opentelemetry::trace::TracerProvider;

use lambda_otel_utils::http_otel_layer::HttpOtelLayer;

#[tokio::main]
async fn main() -> Result<(), Error> {
    // Initialize OpenTelemetry
    let tracer_provider = opentelemetry_sdk::trace::TracerProvider::builder()
        .with_simple_exporter(SpanExporter::default())
        .build();

    let tracer = tracer_provider.tracer("lambda-http-example");
    global::set_tracer_provider(tracer_provider.clone());

    // Build the Lambda service with OpenTelemetry layer
    let func = ServiceBuilder::new()
        .layer(HttpOtelLayer::new(move || {
            tracer_provider.force_flush();
        }))
        .service(service_fn(handler));

    lambda_runtime::run(func).await?;
    Ok(())
}

async fn handler(event: LambdaEvent<ApiGatewayProxyRequest>) -> Result<serde_json::Value, Error> {
    // Your handler logic here
    info!("Received request: {:?}", event.payload.path);

    Ok(json!({
        "statusCode": 200,
        "body": json!({ "message": "Hello from Lambda!" })
    }))
}

This example demonstrates:

  1. Setting up OpenTelemetry with a stdout exporter
  2. Configuring the Lambda runtime with the HttpOtelLayer
  3. Implementing a simple handler function that will be automatically instrumented

Structs§

  • A future that manages the lifecycle of OpenTelemetry spans in Lambda functions.
  • A Tower layer that adds OpenTelemetry tracing to AWS Lambda functions handling HTTP events.
  • The service implementation for the HttpOtelLayer.

Traits§

  • A trait to extract HTTP information from Lambda event payloads.