

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用原生 AOT 编译功能构建.NET Lambda 函数 AWS SAM
<a name="build-dotnet7"></a>

使用 AWS Serverless Application Model (AWS SAM) 构建和打包您的.NET 8 AWS Lambda 函数，利用原生 Ahead-of-Time (AOT) 编译来缩短 AWS Lambda 冷启动时间。

**Topics**
+ [.NET 8 本机 AOT 概览](#build-dotnet7-overview)
+ [AWS SAM 与您的.NET 8 Lambda 函数一起使用](#build-dotnet7-sam)
+ [安装必备组件](#build-dotnet7-prerequisites)
+ [在模板中定义.NET 8 Lambda 函数 AWS SAM](#build-dotnet7-sam-define)
+ [使用 AWS SAM CLI 构建应用程序](#build-dotnet7-sam-build)
+ [了解详情](#build-dotnet7-learn-more)

## .NET 8 本机 AOT 概览
<a name="build-dotnet7-overview"></a>

过去，.NET Lambda 函数的冷启动时间会影响无服务器应用程序的用户体验、系统延迟和使用成本。凭借 .NET 本机 AOT 编译，您可以缩短 Lambda 函数的冷启动时间。要了解有关.NET 8 原生 AOT 的更多信息，请参阅在 D [otnet 存储库中使用原生 A](https://github.com/dotnet/runtime/tree/main/src/coreclr/nativeaot#readme) *O GitHub * T。

## AWS SAM 与您的.NET 8 Lambda 函数一起使用
<a name="build-dotnet7-sam"></a>

执行以下操作，使用 AWS Serverless Application Model （AWS SAM）配置 .NET 8 Lambda 函数：
+ 在开发计算机上安装必备组件。
+ 在模板中定义.NET 8 Lambda 函数。 AWS SAM 
+ 使用构建您的应用程序 AWS SAMCLI。

## 安装必备组件
<a name="build-dotnet7-prerequisites"></a>

以下是所需的先决条件：
+ 的 AWS SAMCLI
+ .NET Core CLI
+ Amazon.Lambda.Tools .NET Core Global Tool
+ Docker

**安装 AWS SAM CLI**

1. 要检查是否已安装 AWS SAM CLI，请运行以下命令：

   ```
   sam --version
   ```

1. 要安装 AWS SAMCLI，请参阅[安装 AWS SAM CLI](install-sam-cli.md)。

1. 要升级的已安装版本 AWS SAMCLI，请参阅[升级 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade)。

**安装 .NET Core CLI**

1. 要下载和安装 .NET Core CLI，请参阅从 Microsoft 网站[下载 .NET](https://dotnet.microsoft.com/download)。

1. 有关 .NET Core CLI 的更多信息，请参阅*《AWS Lambda 开发人员指南》*中的 [.NET Core CLI](https://docs.aws.amazon.com/lambda/latest/dg/csharp-package-cli.html)。

**安装 Amazon.Lambda.Tools .NET Core Global Tool**

1. 运行如下命令：

   ```
   dotnet tool install -g Amazon.Lambda.Tools
   ```

1. 如果您已安装该工具，请确保该工具是使用以下命令的最新版本：

   ```
   dotnet tool update -g Amazon.Lambda.Tools
   ```

1. 有关 Amazon.Lambda.Tools .NET 核心全球工具的更多信息，请参阅上的.NE [T CLI 存储AWS 库](https://github.com/aws/aws-extensions-for-dotnet-cli)扩展。 GitHub

**安装 Docker**
+ 使用本机 AOT 进行构建需要安装 Docker。有关安装说明，请参阅[安装 Docker 以与 AWS SAM CLI 一起使用](install-docker.md)。

## 在模板中定义.NET 8 Lambda 函数 AWS SAM
<a name="build-dotnet7-sam-define"></a>

要定义. NET8 在您的 AWS SAM 模板中使用 Lambda 函数，请执行以下操作：

1. 从您选择的起始目录运行以下命令：

   ```
   sam init
   ```

1. 选择 `AWS Quick Start Templates` 以选择起始模板。

1. 选择 `Hello World Example`模板。

1. 通过输入 `n`，选择不使用最流行的运行时和包类型。

1. 对于运行时，选择 `dotnet8`。

1. 对于包类型，选择 `Zip`。

1. 对于您的入门模板，选择 `Hello World Example using native AOT`。

**安装 Docker**
+ 使用本机 AOT 进行构建需要安装 Docker。有关安装说明，请参阅[安装 Docker 以与 AWS SAM CLI 一起使用](install-docker.md)。

```
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
```

**注意**  
如果的`Event`属性设置`AWS::Serverless::Function`为`Api`，但未指定该`RestApiId`属性，则 AWS SAM 生成`AWS::ApiGateway::RestApi` CloudFormation 资源。

## 使用 AWS SAM CLI 构建应用程序
<a name="build-dotnet7-sam-build"></a>

 在您的项目根目录中，运行 `sam build` 命令以开始构建应用程序。如果 `PublishAot` 属性已在 .NET 8 项目文件中定义，则 AWS SAM CLI 将使用本机 AOT 编译进行构建。要了解有关 `PublishAot` 属性的更多信息，请参阅 Microsoft *.NET 文档*中的[本机 AOT 部署](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/)。

要构建您的函数， AWS SAM CLI 会调用使用 Amazon.Lambda.Tools .NET Core Global Tool 的 .NET Core CLI。

**注意**  
构建时，如果项目所在目录或父目录中存在 `.sln` 文件，则包含该 `.sln` 文件的目录将挂载到容器中。如果找不到 `.sln` 文件，则只会挂载项目文件夹。因此，如果您要构建多项目应用程序，请确保 `.sln` 文件位于属性中。

## 了解详情
<a name="build-dotnet7-learn-more"></a>

有关构建 .NET 8 Lambda 函数的更多信息，请参阅 [Introducing the .NET 8 runtime for AWS Lambda](https://aws.amazon.com/blogs/compute/introducing-the-net-8-runtime-for-aws-lambda/)。

有关 **sam build** 命令的参考，请参阅 [sam build](sam-cli-command-reference-sam-build.md)。