

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 中使用原生 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)
+ [在 AWS SAM 範本中定義 .NET 8 Lambda 函數](#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，請參閱 *Dotnet GitHub 儲存庫*中的[使用原生 AOT](https://github.com/dotnet/runtime/tree/main/src/coreclr/nativeaot#readme)。

## AWS SAM 搭配 .NET 8 Lambda 函數使用
<a name="build-dotnet7-sam"></a>

執行下列動作以使用 () 設定 .NET 8 Lambda AWS Serverless Application Model 函數AWS SAM：
+ 在開發機器上安裝先決條件。
+ 在 AWS SAM 範本中定義 .NET 8 Lambda 函數。
+ 使用 建置您的應用程式 AWS SAM CLI。

## 安裝先決條件
<a name="build-dotnet7-prerequisites"></a>

以下是必要的先決條件：
+ 的 AWS SAM CLI
+ .NET Core CLI
+ Amazon.Lambda.Tools .NET Core 全球工具
+ Docker

**安裝 AWS SAM CLI**

1. 若要檢查是否已安裝 AWS SAM CLI，請執行下列動作：

   ```
   sam --version
   ```

1. 若要安裝 AWS SAM CLI，請參閱 [安裝 AWS SAM CLI](install-sam-cli.md)。

1. 若要升級已安裝版本的 AWS SAM CLI，請參閱 [升級 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 Core Global Tool 的詳細資訊，請參閱 GitHub 上的 [.NET CLI 儲存庫的AWS 延伸項目](https://github.com/aws/aws-extensions-for-dotnet-cli)。

**安裝 Docker**
+ 使用原生 AOT 建置 Docker需要安裝。如需安裝指示，請參閱[安裝 Docker 以搭配 使用 AWS SAM CLI](install-docker.md)。

## 在 AWS SAM 範本中定義 .NET 8 Lambda 函數
<a name="build-dotnet7-sam-define"></a>

若要在 AWS SAM 範本中定義 .NET8 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`命令以開始建置您的應用程式。如果您的 .NET 8 專案檔案中已定義 `PublishAot` 屬性，則 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 函數的詳細資訊，請參閱 [的 .NET 8 執行時間簡介 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)。