@@ -16,12 +16,12 @@ use aws_lambda_events::apigw::{ApiGatewayV2httpRequest, ApiGatewayV2httpRequestC
1616use aws_lambda_events:: apigw:: { ApiGatewayWebsocketProxyRequest , ApiGatewayWebsocketProxyRequestContext } ;
1717use aws_lambda_events:: { encodings:: Body , query_map:: QueryMap } ;
1818use http:: header:: HeaderName ;
19- use http:: HeaderMap ;
19+ use http:: { HeaderMap , HeaderValue } ;
2020use serde:: Deserialize ;
2121use serde_json:: error:: Error as JsonError ;
2222use std:: future:: Future ;
2323use std:: pin:: Pin ;
24- use std:: { io:: Read , mem} ;
24+ use std:: { env , io:: Read , mem} ;
2525use url:: Url ;
2626
2727/// Internal representation of an Lambda http event from
@@ -119,8 +119,9 @@ fn into_api_gateway_v2_request(ag: ApiGatewayV2httpRequest) -> http::Request<Bod
119119 . extension ( RequestContext :: ApiGatewayV2 ( ag. request_context ) ) ;
120120
121121 let mut headers = ag. headers ;
122+ update_xray_trace_id_header ( & mut headers) ;
122123 if let Some ( cookies) = ag. cookies {
123- if let Ok ( header_value) = http :: header :: HeaderValue :: from_str ( & cookies. join ( ";" ) ) {
124+ if let Ok ( header_value) = HeaderValue :: from_str ( & cookies. join ( ";" ) ) {
124125 headers. append ( http:: header:: COOKIE , header_value) ;
125126 }
126127 }
@@ -142,6 +143,13 @@ fn into_api_gateway_v2_request(ag: ApiGatewayV2httpRequest) -> http::Request<Bod
142143 req
143144}
144145
146+ fn update_xray_trace_id_header ( headers : & mut HeaderMap ) {
147+ if let Ok ( xray_trace_id) = env:: var ( "_X_AMZN_TRACE_ID" ) {
148+ if let Ok ( header_value) = HeaderValue :: from_str ( & xray_trace_id) {
149+ headers. insert ( HeaderName :: from_static ( "x-amzn-trace-id" ) , header_value) ;
150+ }
151+ }
152+ }
145153#[ cfg( feature = "apigw_rest" ) ]
146154fn into_proxy_request ( ag : ApiGatewayProxyRequest ) -> http:: Request < Body > {
147155 let http_method = ag. http_method ;
@@ -179,6 +187,7 @@ fn into_proxy_request(ag: ApiGatewayProxyRequest) -> http::Request<Body> {
179187 // multi-value_headers our cannoncial source of request headers
180188 let mut headers = ag. multi_value_headers ;
181189 headers. extend ( ag. headers ) ;
190+ update_xray_trace_id_header ( & mut headers) ;
182191
183192 let base64 = ag. is_base64_encoded . unwrap_or_default ( ) ;
184193 let mut req = builder
@@ -229,6 +238,7 @@ fn into_alb_request(alb: AlbTargetGroupRequest) -> http::Request<Body> {
229238 // multi-value_headers our cannoncial source of request headers
230239 let mut headers = alb. multi_value_headers ;
231240 headers. extend ( alb. headers ) ;
241+ update_xray_trace_id_header ( & mut headers) ;
232242
233243 let base64 = alb. is_base64_encoded ;
234244
@@ -291,6 +301,7 @@ fn into_websocket_request(ag: ApiGatewayWebsocketProxyRequest) -> http::Request<
291301 // multi-value_headers our cannoncial source of request headers
292302 let mut headers = ag. multi_value_headers ;
293303 headers. extend ( ag. headers ) ;
304+ update_xray_trace_id_header ( & mut headers) ;
294305
295306 let base64 = ag. is_base64_encoded . unwrap_or_default ( ) ;
296307 let mut req = builder
0 commit comments