Building .NET Lambda functions with Native AOT compilation in AWS SAM - AWS Serverless Application Model

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.

.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 in the Dotnet GitHub repository.

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
  1. To check if you already have the AWS SAM CLI installed, run the following:

    sam --version
  2. To install the AWS SAM CLI, see Install the AWS SAM CLI.

  3. To upgrade an installed version of the AWS SAM CLI, see Upgrading the AWS SAM CLI.

Install the .NET Core CLI
  1. To download and install the .NET Core CLI, see Download .NET from Microsoft's website.

  2. 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
  1. Run the following command:

    dotnet tool install -g Amazon.Lambda.Tools
  2. 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
  3. For more information about the Amazon.Lambda.Tools .NET Core Global Tool, see the AWS Extensions for .NET CLI repository on GitHub.

Install Docker

Define .NET 8 Lambda functions in your AWS SAM template

To define a .NET8 Lambda function in your AWS SAM template, do the following:

  1. Run the following command from a starting directory of your choice::

    sam init
  2. Select AWS Quick Start Templates to choose a starting template.

  3. Choose the Hello World Example template.

  4. Choose to not use the most popular runtime and package type by entering n.

  5. For runtime, choose dotnet8.

  6. For package type, choose Zip.

  7. For your starter template, choose Hello World Example using native AOT.

Install Docker
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 in Microsoft's .NET documentation.

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.