Building .NET Lambda functions with Native AOT compilation in AWS SAM
Build and package your .NET 8 AWS Lambda functions with the AWS Serverless Application Model (AWS SAM), utilizing Native Ahead-of-Time (AOT) compilation to improve AWS Lambda cold-start times.
Topics
.NET 8 Native AOT overview
Historically, .NET Lambda functions have cold-start times which impact user experience,
system latency, and usage costs of your serverless applications. With .NET 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
Using AWS SAM with your .NET 8 Lambda functions
Do the following to configure your .NET 8 Lambda functions with the AWS Serverless Application Model (AWS SAM):
-
Install prerequisites on your development machine.
-
Define .NET 8 Lambda functions in your AWS SAM template.
-
Build your application with the AWS SAM CLI.
Install prerequisites
The following are required prerequisites:
-
The AWS SAM CLI
-
The .NET Core CLI
-
The Amazon.Lambda.Tools .NET Core Global Tool
-
Docker
Install the AWS SAM CLI
-
To check if you already have the AWS SAM CLI installed, run the following:
sam --version
-
To install the AWS SAM CLI, see Install the AWS SAM CLI.
-
To upgrade an installed version of the AWS SAM CLI, see Upgrading the AWS SAM CLI.
Install the .NET Core CLI
-
To download and install the .NET Core CLI, see Download .NET
from Microsoft's website. -
For more information on the .NET Core CLI, see .NET Core CLI in the AWS Lambda Developer Guide.
Install the Amazon.Lambda.Tools .NET Core Global Tool
-
Run the following command:
dotnet tool install -g Amazon.Lambda.Tools
-
If you already have the tool installed, you can make sure that it is the latest version using the following command:
dotnet tool update -g Amazon.Lambda.Tools
-
For more information about the Amazon.Lambda.Tools .NET Core Global Tool, see the AWS Extensions for .NET CLI
repository on GitHub.
Install Docker
-
Building with Native AOT, requires Docker to be installed. For installation instructions, see Installing Docker to use with the AWS SAM CLI.
Define .NET 8 Lambda functions in your AWS SAM template
To define a .NET8 Lambda function in your AWS SAM template, do the following:
-
Run the following command from a starting directory of your choice::
sam init
Select
AWS Quick Start Templates
to choose a starting template.Choose the
Hello World Example
template.Choose to not use the most popular runtime and package type by entering
n
.For runtime, choose
dotnet8
.For package type, choose
Zip
.For your starter template, choose
Hello World Example using native AOT
.
Install Docker
-
Building with Native AOT, requires Docker to be installed. For installation instructions, see Installing Docker to use with the AWS SAM CLI.
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: ./src/HelloWorldAot/ Handler: bootstrap Runtime: dotnet8 Architectures: - x86_64 Events: HelloWorldAot: Type: Api Properties: Path: /hello Method: get
Build your application with the AWS SAM CLI
From your project's root directory, run sam build
to begin building your
application. If the PublishAot
property has been defined in your .NET 8 project
file, the AWS SAM CLI will build with Native AOT compilation. To learn more about the
PublishAot
property, see Native AOT
Deployment
To build your function, the AWS SAM CLI invokes the .NET Core CLI which uses the Amazon.Lambda.Tools .NET Core Global Tool.
Note
When building, if a .sln
file exists in the same or parent
directory of your project, the directory containing the .sln
file will
be mounted to the container. If a .sln
file is not found, only the
project folder is mounted. Therefore, if you are building a multi-project application,
ensure the .sln
file is property located.
Learn more
For more information on building .NET 8 Lambda functions, see Introducing the .NET 8 runtime for AWS Lambda
For a reference of the sam build command, see sam build.