Siemens.AspNet.Lambda.Sdk
0.1.0-alpha.130
Prefix Reserved
See the version list below for details.
dotnet add package Siemens.AspNet.Lambda.Sdk --version 0.1.0-alpha.130
NuGet\Install-Package Siemens.AspNet.Lambda.Sdk -Version 0.1.0-alpha.130
<PackageReference Include="Siemens.AspNet.Lambda.Sdk" Version="0.1.0-alpha.130" />
<PackageVersion Include="Siemens.AspNet.Lambda.Sdk" Version="0.1.0-alpha.130" />
<PackageReference Include="Siemens.AspNet.Lambda.Sdk" />
paket add Siemens.AspNet.Lambda.Sdk --version 0.1.0-alpha.130
#r "nuget: Siemens.AspNet.Lambda.Sdk, 0.1.0-alpha.130"
#addin nuget:?package=Siemens.AspNet.Lambda.Sdk&version=0.1.0-alpha.130&prerelease
#tool nuget:?package=Siemens.AspNet.Lambda.Sdk&version=0.1.0-alpha.130&prerelease
Siemens.AspNet.Lambda.Sdk
The Siemens.AspNet.Lambda.Sdk
NuGet package simplifies and accelerates AWS Lambda function development using
ASP.NET-inspired middleware pipelines, structured exception handling, and pre-configured startup patterns.
📖 Overview
This SDK helps developers focus on implementing business logic by abstracting boilerplate and common concerns specific to AWS Lambda environments.
✅ Key Features
- 🚀 Quick Lambda function implementation with structured base classes.
- ⚙️ ASP.NET-like middleware pipeline support.
- 📌 Customizable startup configurations with dependency injection.
- 🔍 Structured error logging with built-in handlers.
- 🔄 JSON serialization management.
- 🛠️ Predefined logging and error handling strategies.
- 🕒 Built-in cancellation support to gracefully handle Lambda execution limits.
📦 Installation
Using the .NET CLI
dotnet add package Siemens.AspNet.Lambda.Sdk
🧠 Key Concepts
Component | Description |
---|---|
FunctionBase<TRequest> |
Base class for request-only Lambda implementation |
FunctionBase<TRequest, TResponse> |
Base class for request-response Lambda implementation |
FunctionHandlerBase<TStartup, TRequest> |
Lambda with custom handler and dependency injection (request-only) |
FunctionHandlerBase<TStartup, TRequest, TResponse> |
Lambda with custom handler and dependency injection |
ILambdaMiddleware<TRequest> |
Middleware interface for request-only Lambdas |
ILambdaMiddleware<TRequest, TResponse> |
Middleware interface for request-response Lambdas |
⚡ Quickstart Examples
Dockerfile and Lambda entry point
Use the fully qualified method name (InvokeAsync
) as the Lambda entry point.
Sample Dockerfile entry point:
CMD ["SiemensGPT.InitCognitoUser::SiemensGPT.InitCognitoUser.Function::InvokeAsync"]
Implementing a simple Lambda function without response
public class MyFunction : FunctionBase<SQSEvent>
{
public override Task HandleAsync(SQSEvent request, ILambdaContext context, CancellationToken cancellationToken)
{
// Your Lambda logic here
}
}
Implementing a simple Lambda function with request and response
public class Function : FunctionBase<CognitoPostConfirmationEvent, CognitoPostConfirmationEvent>
{
public override Task<CognitoPostConfirmationEvent> HandleAsync(CognitoPostConfirmationEvent request,
ILambdaContext context,
CancellationToken cancellationToken)
{
// Your Lambda logic here
}
}
Implementing a Lambda function with custom handler and dependency injection
Function:
public class Function : FunctionHandlerBase<Startup, CognitoPostConfirmationEvent, CognitoPostConfirmationEvent>
{
}
Startup:
public sealed class Startup : LambdaStartup
{
protected override void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
base.ConfigureServices(services, configuration);
services.AddFunctionHandler();
}
}
FunctionHandler registration:
internal static class AddFunctionHandlerExtension
{
internal static void AddFunctionHandler(this IServiceCollection services)
{
services.AddSingletonIfNotExists<IFunctionHandler<CognitoPostConfirmationEvent, CognitoPostConfirmationEvent>, FunctionHandler>();
}
}
internal sealed class FunctionHandler(IMyService service, IJsonSerializer jsonSerializer)
: IFunctionHandler<CognitoPostConfirmationEvent, CognitoPostConfirmationEvent>
{
public Task<CognitoPostConfirmationEvent> HandleAsync(CognitoPostConfirmationEvent request,
ILambdaContext context,
CancellationToken cancellationToken)
{
// Your custom logic here
}
}
📌 Cancellation and Execution Management
The SDK includes built-in cancellation token support to help gracefully handle AWS Lambda execution timeouts.
Configure the cancellation buffer time:
internal sealed class LambdaSettings
{
/// <summary>
/// Offset to trigger the cancellation token slightly before Lambda's remaining execution time ends, ensuring proper resource cleanup.
/// </summary>
public TimeSpan CancellationBufferTime { get; init; } = TimeSpan.FromSeconds(10);
}
Base Function with Cancellation Token
If you want to implement your own function handler, here is a sample how to set up such a use case
public abstract class FunctionBase<TRequest, TResponse> : FunctionWithStartupBase<LambdaStartup, TRequest, TResponse>
{
}
public abstract class FunctionWithStartupBase<TStartup, TRequest, TResponse> where TStartup : LambdaStartup, new()
{
protected ILogger Logger { get; private set; }
private readonly ILambdaPipelineExecutor<TRequest, TResponse> _pipeline;
private readonly LambdaSettings _lambdaSettings;
protected FunctionWithStartupBase()
{
var startup = new TStartup();
var serviceProvider = startup.Setup();
_pipeline = serviceProvider.GetRequiredService<ILambdaPipelineExecutor<TRequest, TResponse>>();
_lambdaSettings = serviceProvider.GetRequiredService<LambdaSettings>();
Logger = startup.Logger;
}
public Task<TResponse> InvokeAsync(TRequest request, ILambdaContext context)
{
var cancelAfter = context.RemainingTime.Subtract(_lambdaSettings.CancellationBufferTime);
using var cts = new CancellationTokenSource(cancelAfter);
return _pipeline.ExecuteAsync(request, context, HandleAsync, cts.Token);
}
public abstract Task<TResponse> HandleAsync(TRequest request,
ILambdaContext context,
CancellationToken cancellationToken);
}
📌 Error Handling and Logging
Built-in structured handlers:
DefaultExceptionLogHandler
ProblemDetailsExceptionLogHandler
ValidationDetailsExceptionLogHandler
ValidationProblemDetailsExtendedExceptionLogHandler
Each handler provides detailed, structured logging of exceptions, aiding rapid diagnostics and maintenance.
📚 Documentation
Detailed documentation and further examples can be found within the codebase and will soon be available online.
📢 Contributing
Contributions and feedback are welcome! Please create issues or pull requests to suggest improvements.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | 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 was computed. 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. |
-
net9.0
- Siemens.AspNet.Lambda.Sdk.Contracts (>= 0.1.0-alpha.130)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.1.0-alpha.179 | 0 | 6/23/2025 |
0.1.0-alpha.178 | 6 | 6/23/2025 |
0.1.0-alpha.176 | 4 | 6/23/2025 |
0.1.0-alpha.174 | 104 | 6/19/2025 |
0.1.0-alpha.173 | 102 | 6/19/2025 |
0.1.0-alpha.172 | 106 | 6/17/2025 |
0.1.0-alpha.171 | 103 | 6/16/2025 |
0.1.0-alpha.169 | 105 | 6/16/2025 |
0.1.0-alpha.165 | 225 | 6/13/2025 |
0.1.0-alpha.164 | 211 | 6/13/2025 |
0.1.0-alpha.163 | 216 | 6/13/2025 |
0.1.0-alpha.160 | 246 | 6/12/2025 |
0.1.0-alpha.159 | 269 | 6/11/2025 |
0.1.0-alpha.158 | 252 | 6/11/2025 |
0.1.0-alpha.143 | 247 | 6/11/2025 |
0.1.0-alpha.142 | 246 | 6/11/2025 |
0.1.0-alpha.140 | 255 | 6/11/2025 |
0.1.0-alpha.139 | 252 | 6/10/2025 |
0.1.0-alpha.138 | 254 | 6/9/2025 |
0.1.0-alpha.137 | 38 | 6/7/2025 |
0.1.0-alpha.136 | 36 | 6/7/2025 |
0.1.0-alpha.135 | 65 | 6/6/2025 |
0.1.0-alpha.134 | 71 | 6/6/2025 |
0.1.0-alpha.130 | 118 | 6/5/2025 |
0.1.0-alpha.129 | 108 | 6/4/2025 |
0.1.0-alpha.128 | 102 | 6/4/2025 |
0.1.0-alpha.122 | 109 | 6/3/2025 |
0.1.0-alpha.121 | 111 | 6/1/2025 |
0.1.0-alpha.120 | 68 | 6/1/2025 |
0.1.0-alpha.118 | 109 | 5/28/2025 |
0.1.0-alpha.117 | 108 | 5/28/2025 |
0.1.0-alpha.116 | 108 | 5/28/2025 |
0.1.0-alpha.115 | 116 | 5/26/2025 |
0.1.0-alpha.114 | 109 | 5/22/2025 |
0.1.0-alpha.112 | 109 | 5/21/2025 |
0.1.0-alpha.111 | 110 | 5/20/2025 |
0.1.0-alpha.108 | 109 | 5/19/2025 |
0.1.0-alpha.104 | 173 | 5/18/2025 |
0.1.0-alpha.102 | 195 | 5/14/2025 |
0.1.0-alpha.101 | 191 | 5/14/2025 |
0.1.0-alpha.100 | 196 | 5/12/2025 |
0.1.0-alpha.99 | 186 | 5/12/2025 |
0.1.0-alpha.98 | 34 | 5/10/2025 |
0.1.0-alpha.97 | 38 | 5/10/2025 |
0.1.0-alpha.86 | 111 | 5/8/2025 |
0.1.0-alpha.85 | 108 | 5/8/2025 |
0.1.0-alpha.84 | 108 | 5/8/2025 |
0.1.0-alpha.82 | 112 | 5/7/2025 |
0.1.0-alpha.81 | 111 | 5/6/2025 |
0.1.0-alpha.76 | 38 | 5/3/2025 |
0.1.0-alpha.75 | 64 | 5/2/2025 |
0.1.0-alpha.74 | 63 | 5/2/2025 |