1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//! AWS extension implementation for Sentry's AWS Lambda layer.
//!
//! An AWS extension is a binary that is bundled along with the SDK and its dependencies in an AWS
//! Layer that is added to a user's Lambda function. The Lambda Runtime will start the extension
//! binary as a concurrent process that runs independently of the actual function invocation and
//! continues running across multiple function invocations.
//!
//! Sentry's extension is basically existing Relay running in proxy mode with an additional
//! [`AwsExtension`] service. The service takes care of the extension lifecycle, namely registering
//! the extension and continuously polling for next events. Note that the interval between two next
//! event calls adds to the billing time of the lambda invocation.
//!
//! The main advantage we get currently from the extension is the lambda function not having to wait
//! for the event being sent to Sentry by the SDK. The actual sending happens in a concurrent Relay
//! process so the main function can return sooner and reduce response time of the user's function.
//! In the future, we might use some of [`RegisterResponse`] and [`NextEventResponse`]'s fields in
//! the event payload but that requires intercepting the envelope and modifying it before sending to
//! upstream.
//!
//! See the official [Lambda Extensions API
//! documentation](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html) for
//! further details.
#![warn(missing_docs)]
#![doc(
    html_logo_url = "https://raw.githubusercontent.com/getsentry/relay/master/artwork/relay-icon.png",
    html_favicon_url = "https://raw.githubusercontent.com/getsentry/relay/master/artwork/relay-icon.png"
)]
#![allow(clippy::derive_partial_eq_without_eq)]

mod aws_extension;
pub use aws_extension::*;