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:
- Setting up OpenTelemetry with a stdout exporter
- Configuring the Lambda runtime with the
HttpOtelLayer - 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.