aws-powertools / powertools-lambda-dotnet

Powertools is a developer toolkit to implement Serverless best practices and increase developer velocity.
https://docs.powertools.aws.dev/lambda/dotnet/
MIT No Attribution
149 stars 23 forks source link

Feature request: Support Native AOT #212

Open hjgraca opened 1 year ago

hjgraca commented 1 year ago

Use case

Historically, .NET Lambda functions have cold-start times which impact user experience, system latency, and usage costs of your serverless applications. With .NET 8, Microsoft adds support for Native AOT compilation, which speeds up performance by compiling .NET code directly to machine and operating system native code, eliminating Just-in-Time (JIT) compiling at runtime. With .NET 8 Native AOT compilation, you can improve cold-start times of your Lambda functions. To learn more about Native AOT for .NET 8, see Using Native AOT in the Dotnet GitHub repository.

Solution/User Experience

Currently Native AOT is supported in .NET 8 but only a limited number of libraries are fully compatible with native AOT in .NET 8. Lambda Powertools is not fully compatible with native AOT because of some libraries it uses (for example System.Text.Json.Serializer) which is not supported in native AOT

Proposal

All the work for this release will happen in a separate branch aot-support, this will allow us to publish alpha releases to Nuget. This will allow customers to get early access to the new features and optionally start applying the required changes or simply give feedback on the new items.

Quick summary

The work for AOT support will be done in multiple phases beginning on supporting Logging and Metrics and continuing to the remaining utilities. We believe these two utilities will have the most work and that is the reason we are starting from there.

Item Issue Status Code change required Notes
.NET 8 support #542 βœ…
Create automation for .NET 8 release multiple target frameworks #542 βœ…
Logging AOT support #557 🚧 Yes
Logging AOT end to end tests πŸ—“
Logging tackle AOT warnings πŸ—“ 100+ warnings
Metrics AOT support #602 🚧 Yes
Metrics AOT end to end tests πŸ—“
Metrics tackle AOT warnings #602 βœ… Yes 10+ warnings
Tracing AOT support 🚧 Yes
Tracing AOT end to end tests πŸ—“
Tracing tackle AOT warnings 🚧 Yes 10+ warnings
Create guide in docs πŸ—“

Legend for Status column:

Potential challenges

Tackling AOT trim warnings will be the most time consuming tasks, for this reason if some unforeseen blocker comes up we might decide to reprioritize and exclude some issues from the milestone.

Acknowledgment

jeastham1993 commented 1 year ago

@hjgraca PR raised for the first pass on native AOT support. I expect this will need some discussion, especially around logging. We can't easily support Exceptions in their entirety, byte[], streams or any anoymous types. Some of the unit tests will fail based on this missing functionality but I thought I would leave it that way as a means of discussion

https://github.com/aws-powertools/powertools-lambda-dotnet/pull/341

The crux of the work is adding a new IPowerToolsSerializer, initially with 2 implementations. A default one that uses System.Text.Json, and then a source genereted one that allows users to add a custom serialization context.

This is the same way it works for the Lambda runtime itself.

hjgraca commented 5 months ago

We have released alpha versions for Logging and Metrics. They are now available to download from Nuget.

These are very early release versions and not recommended for production workloads, we have done our best to support all features, but you will see some warnings when trimming for AOT deployment.

andy-potter-evotix commented 2 months ago

We are using .NET8 AOT based lambda in development at the moment with the 1.6.0-alpha version of the PowerTools logging. We are due to go to production in around 4-6 weeks time. Do you have plans to release a production ready version of PowerTools logging with AOT support?

hjgraca commented 2 months ago

Hi @andy-potter-evotix thanks for using Powertools, the full support of AOT is top priority and we are working as fast as we can to ship it as soon as possible, unfortunately I cannot guarantee delivery dates, but in the next weeks we will be releasing another alpha and more stable versions. Hopefully we can get something by that time that we are confident that can go to production. Keep an eye on this issue we will update whenever we have news. If you want to reach us directly use can use the email aws-lambda-powertools-feedback@amazon.com

Again thanks for using Powertools πŸ‘