Running ASP.NET 8 Minimal API on AWS Lambda with Container Image
Code samples were updated to run with x86_64
architecture
.NET 8 is finally here, since its release over a month ago.
Probably one of the much anticipated feature was Native AOT and its support for ASP.NET Core. Benefits coming along with it (such as minimized disk footprint, reduced startup time, and reduced memory demand) will lead to exploration how to run ASP.NET Core 8 apps in AWS Lambda.
Last year AWS gave us only two options to run .NET 7 Lambda functions: either container image or custom runtime. Now, in a twist for 2024, AWS is throwing its full support behind .NET 8 runtime, set to drop officially sometime in January. I think it's due to the fact that .NET 8 is an LTS release with a solid 3-year support plan.
And today I will show you the simplest way to run ASP.NET Core 8 in AWS Lambda without tearing everything apart!
This article targets experienced ASP.NET Core developers who considering to run their apps in serverless environment without major changes in existing programming model
TL;DR expected changes:
- use
Amazon.Lambda.AspNetCoreServer.Hosting
package with.AddAWSLambdaHosting
extension method - use AWS managed base image for .NET 8. Currently only
public.ecr.aws/lambda/dotnet:8-preview
is available - use
CMD
with assembly name instead of function handler string in Dockerfile
All codebase is available at: https://github.com/ahanoff/how-to/tree/main/aspnet8-minimal-api-lambda-container-image
First let's see what kind of objectives ASP.NET Core developers might have prior to investing their time and efforts into AWS serverless technology.