AwsLambda.Host.Abstractions
1.0.1-beta.2
See the version list below for details.
dotnet add package AwsLambda.Host.Abstractions --version 1.0.1-beta.2
NuGet\Install-Package AwsLambda.Host.Abstractions -Version 1.0.1-beta.2
<PackageReference Include="AwsLambda.Host.Abstractions" Version="1.0.1-beta.2" />
<PackageVersion Include="AwsLambda.Host.Abstractions" Version="1.0.1-beta.2" />
<PackageReference Include="AwsLambda.Host.Abstractions" />
paket add AwsLambda.Host.Abstractions --version 1.0.1-beta.2
#r "nuget: AwsLambda.Host.Abstractions, 1.0.1-beta.2"
#:package AwsLambda.Host.Abstractions@1.0.1-beta.2
#addin nuget:?package=AwsLambda.Host.Abstractions&version=1.0.1-beta.2&prerelease
#tool nuget:?package=AwsLambda.Host.Abstractions&version=1.0.1-beta.2&prerelease
AwsLambda.Host.Abstractions
Core interfaces and abstractions for the aws-lambda-host framework.
Overview
Core interfaces and delegates that define the AwsLambda.Host framework contract. This package provides:
- Handler Abstractions: Interfaces for Lambda request and response handling across different event types
- Envelope Abstractions: Contracts for extracting request payloads and packing response payloads
- Middleware Contracts: Abstractions for building and composing middleware components
- Dependency Injection: Service container and lifetime management interfaces
- Extension Points: Contracts for custom integrations and framework extensions
This package is typically used implicitly by AwsLambda.Host, but is essential if you're building custom integrations, middleware components, or extensions to the framework.
Packages
The framework is divided into focused packages:
| Package | NuGet | Downloads |
|---|---|---|
| AwsLambda.Host | ||
| AwsLambda.Host.Abstractions | ||
| AwsLambda.Host.OpenTelemetry |
Installation
Install via NuGet:
dotnet add package AwsLambda.Host.Abstractions
Or specify a version:
dotnet add package AwsLambda.Host.Abstractions --version <version>
Ensure your project uses C# 11 or later:
<PropertyGroup>
<LangVersion>11</LangVersion>
</PropertyGroup>
Note: This package is typically included automatically when you use AwsLambda.Host. Direct installation is only necessary when building custom integrations or extensions.
Core Abstractions
Builder Interfaces
The framework uses three specialized builder interfaces for configuring different Lambda execution phases, providing clear separation of concerns:
ILambdaInvocationBuilder
Configures the Lambda invocation request/response pipeline:
Handle(LambdaInvocationDelegate handler)– Register the Lambda invocation handler that processes each incoming eventUse(Func<LambdaInvocationDelegate, LambdaInvocationDelegate> middleware)– Add middleware to the invocation pipeline; middleware is composed sequentially and can inspect/modify the context before and after invocationHandler(property) – The currently registered invocation handlerMiddlewares(property) – Collection of registered middleware componentsProperties(property) – Key/value collection for sharing between the builder phases and all invocationsServices(property) –IServiceProviderfor accessing registered services during configurationBuild()– Compiles the configured handler and middleware into an executableLambdaInvocationDelegate
ILambdaOnInitBuilder
Configures the initialization phase (runs once on cold start):
OnInit(LambdaInitDelegate handler)– Register initialization handlers that run before the first invocation; handlers are executed and returntrueto proceed orfalseto abort initializationInitHandlers(property) – Collection of registered initialization handlersServices(property) –IServiceProviderfor accessing registered services during configurationBuild()– Compiles the configured handlers into an executable initialization delegate with concurrent execution and error aggregation
ILambdaOnShutdownBuilder
Configures the shutdown phase (runs once before Lambda termination):
OnShutdown(LambdaShutdownDelegate handler)– Register shutdown handlers that run during cleanup; handlers execute sequentially for graceful resource releaseShutdownHandlers(property) – Collection of registered shutdown handlersServices(property) –IServiceProviderfor accessing registered services during configurationBuild()– Compiles the configured handlers into an executable shutdown delegate with sequential execution and error logging
These interfaces are obtained from LambdaApplication after calling Build(). The builder pattern
flow is:
LambdaApplication.CreateBuilder()
→ Configure services
→ .Build()
→ Returns LambdaApplication (implementing all three builder interfaces)
→ Configure invocation pipeline (ILambdaInvocationBuilder)
→ Configure init handlers (ILambdaOnInitBuilder)
→ Configure shutdown handlers (ILambdaOnShutdownBuilder)
This design separates concerns between request/response handling, initialization, and lifecycle cleanup. See AwsLambda.Host for detailed usage examples and the complete builder API.
ILambdaHostContext
Encapsulates a single Lambda invocation and provides access to contextual information and services:
ServiceProvider– Access to the scoped DI container for resolving services during invocationCancellationToken– Cancellation signal triggered when Lambda approaches its timeout, allowing graceful shutdownFeatures–IFeatureCollectionproviding access to custom functionalaty within the invocation pipeline such as for accessing the invocation Event or Response dataItems–IDictionary<object, object?>for storing invocation-scoped data; cleared per invocationProperties–IDictionary<string, object?>for accessing shared data configured during the build phase; persists across invocationsRawInvocationData– Raw stream access to serialized event and response data viaRawInvocationData.EventandRawInvocationData.Response
Properties vs Items
Properties and Items serve different purposes:
- Properties: Configured during the build phase and available for the lifetime of the Lambda function. Use this for data that should be shared across invocations (e.g., configuration values set during initialization).
- Items: Scoped to a single invocation and cleared after each request completes. Use this for temporary state that is specific to a single Lambda invocation.
ILambdaCancellationFactory
Provides a factory for creating cancellation token sources configured for AWS Lambda invocations:
NewCancellationTokenSource(ILambdaContext)– Creates aCancellationTokenSourcethat cancels before the Lambda function timeout, allowing time for graceful shutdown
This interface enables custom implementations for managing cancellation tokens with respect to Lambda's remaining execution time. The default implementation applies a configurable buffer duration to ensure operations complete before the Lambda runtime's hard timeout.
Envelope Abstractions
IRequestEnvelope
Defines a contract for extracting and deserializing incoming Lambda event payloads. Implementations extract the inner payload from the outer Lambda event structure and deserialize it for handler processing.
IResponseEnvelope
Defines a contract for serializing and packing handler results into Lambda response structures. Implementations serialize the handler result and place it in the appropriate location within the outer response structure.
These abstractions enable strongly-typed handling of AWS Lambda events (like API Gateway, SQS) with automatic payload extraction and response packing. See the envelope packages for concrete implementations.
Handler Delegates
LambdaInvocationDelegate
Task LambdaInvocationDelegate(ILambdaHostContext context)
Processes a Lambda invocation.
LambdaInitDelegate
Task<bool> LambdaInitDelegate(IServiceProvider services, CancellationToken cancellationToken)
Runs once during initialization. Return true to continue, false to abort.
LambdaShutdownDelegate
Task LambdaShutdownDelegate(IServiceProvider services, CancellationToken cancellationToken)
Runs once during shutdown for cleanup.
Lambda Lifecycle
The abstractions represent three Lambda execution phases:
- Init –
LambdaInitDelegateruns once during function initialization - Invocation –
LambdaInvocationDelegateruns for each event - Shutdown –
LambdaShutdownDelegateruns once before termination
For implementation details and examples, see AwsLambda.Host.
Related Packages
- AwsLambda.Host – Core Lambda framework with middleware and DI
- AwsLambda.Host.OpenTelemetry – OpenTelemetry integration for distributed tracing
- Root README – Project overview and examples
Documentation
- Full Project Documentation – Comprehensive guides and patterns
- Examples – Sample Lambda functions demonstrating framework patterns
Contributing
Contributions are welcome! Please check the GitHub repository for contribution guidelines.
License
This project is licensed under the MIT License. See LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Amazon.Lambda.Core (>= 2.8.0)
-
net8.0
- Amazon.Lambda.Core (>= 2.8.0)
-
net9.0
- Amazon.Lambda.Core (>= 2.8.0)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on AwsLambda.Host.Abstractions:
| Package | Downloads |
|---|---|
|
AwsLambda.Host
.NET Host for AWS Lambda |
|
|
AwsLambda.Host.OpenTelemetry
OpenTelemetry for .NET Host for AWS Lambda |
|
|
AwsLambda.Host.Envelopes.Sqs
Strongly-typed SQS Models AWS Lambda |
|
|
AwsLambda.Host.Envelopes.ApiGateway
Strongly-typed API Gateway Models AWS Lambda |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.1-beta.3 | 18 | 11/24/2025 |
| 1.0.1-beta.2 | 24 | 11/24/2025 |
| 1.0.1-beta.1 | 27 | 11/24/2025 |
| 1.0.0 | 53 | 11/24/2025 |
| 1.0.0-beta.3 | 31 | 11/24/2025 |
| 1.0.0-beta.2 | 92 | 11/15/2025 |
| 1.0.0-beta.1 | 87 | 11/15/2025 |
| 0.1.3 | 196 | 11/10/2025 |
| 0.1.2 | 179 | 11/10/2025 |
| 0.0.7-alpha.3 | 144 | 11/9/2025 |
| 0.0.7-alpha.2 | 78 | 11/9/2025 |
| 0.0.7-alpha.1 | 79 | 11/9/2025 |
| 0.0.6-alpha.1 | 136 | 11/6/2025 |
| 0.0.5-alpha.1 | 128 | 11/6/2025 |
| 0.0.4-alpha.3 | 134 | 11/2/2025 |
| 0.0.4-alpha.2 | 134 | 11/2/2025 |
| 0.0.4-alpha.1 | 136 | 11/2/2025 |
| 0.0.3-alpha.1 | 59 | 11/1/2025 |
| 0.0.2-alpha.10 | 136 | 10/30/2025 |
| 0.0.2-alpha.9 | 131 | 10/30/2025 |
| 0.0.2-alpha.8 | 134 | 10/30/2025 |
| 0.0.2-alpha.7 | 132 | 10/30/2025 |
| 0.0.2-alpha.6 | 124 | 10/30/2025 |
| 0.0.2-alpha.5 | 129 | 10/30/2025 |
| 0.0.2-alpha.3 | 124 | 10/30/2025 |
| 0.0.2-alpha.2 | 131 | 10/30/2025 |
| 0.0.2-alpha.1 | 135 | 10/29/2025 |
| 0.0.1-alpha.7 | 116 | 10/26/2025 |
| 0.0.1-alpha.6 | 112 | 10/26/2025 |