本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
除了託管事件驅動型函數之外,您還可以搭配使用 .NET 與 Lambda 來託管輕量型 ASP.NET 應用程式。您可以使用 Amazon.Lambda.AspNetCoreServer
NuGet 套件來建置和部署 ASP.NET 應用程式。在本節中,您將了解如何使用 .NET Lambda CLI 工具,將 ASP.NET Web API 部署至 Lambda。
先決條件
- .NET 8 SDK
-
安裝 .NET 8
SDK 和 ASP.NET Core 執行時期。 - Amazon.Lambda.Tools
-
若要建立 Lambda 函數,請使用 Amazon.Lambda.Tools
.NET Core Global Tools 延伸模組 。若要安裝 Amazon.Lambda.Tools,請執行下列命令: dotnet tool install -g Amazon.Lambda.Tools
如需有關 Amazon.Lambda.Tools .NET CLI 延伸模組的詳細資訊,請參閱 GitHub 上的適用於 .NET CLI 的AWS 延伸模組
儲存庫。 - Amazon.Lambda.Templates
-
若要產生 Lambda 函數程式碼,請使用 Amazon.Lambda.Templates
NuGet 套件。若要安裝此範本套件,請執行下列命令: dotnet new --install Amazon.Lambda.Templates
將 ASP.NET Web API 部署到 Lambda
若要使用 ASP.NET 部署 Web API,您可以使用 .NET Lambda 範本建立新的 Web API 專案。使用下列命令來初始化新的 ASP.NET Web API 專案。在範例命令中,我們將專案命名為 AspNetOnLambda
。
dotnet new serverless.AspNetCoreWebAPI -n AspNetOnLambda
此命令會在您的專案目錄中建立以下檔案和目錄。
.
└── AspNetOnLambda
├── src
│ └── AspNetOnLambda
│ ├── AspNetOnLambda.csproj
│ ├── Controllers
│ │ └── ValuesController.cs
│ ├── LambdaEntryPoint.cs
│ ├── LocalEntryPoint.cs
│ ├── Readme.md
│ ├── Startup.cs
│ ├── appsettings.Development.json
│ ├── appsettings.json
│ ├── aws-lambda-tools-defaults.json
│ └── serverless.template
└── test
└── AspNetOnLambda.Tests
├── AspNetOnLambda.Tests.csproj
├── SampleRequests
│ └── ValuesController-Get.json
├── ValuesControllerTests.cs
└── appsettings.json
當 Lambda 調用函數時,使用的進入點就是 LambdaEntryPoint.cs
檔案。.NET Lambda 範本建立的檔案包含下列程式碼。
namespace AspNetOnLambda;
public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{
protected override void Init(IWebHostBuilder builder)
{
builder
.UseStartup≪Startup≫();
}
protected override void Init(IHostBuilder builder)
{
}
}
Lambda 使用的進入點,必須繼承自 Amazon.Lambda.AspNetCoreServer
套件中三個基本類別的其中一個。這三個基本類別為:
-
APIGatewayProxyFunction
-
APIGatewayHttpApiV2ProxyFunction
-
ApplicationLoadBalancerFunction
當您使用提供的 .NET Lambda 範本建立 LambdaEntryPoint.cs
檔案時,所使用的預設類別為 APIGatewayProxyFunction
。您在函數中使用的基本類別,取決於位於 Lambda 函數前的 API 層。
三個基本類別都包含名為 FunctionHandlerAsync
的公有方法。Lambda 用來調用函數的處理常式字串中,會包含此方法的名稱。FunctionHandlerAsync
方法會將輸入事件承載轉換為正確的 ASP.NET 格式,並將 ASP.NET 回應轉換回 Lambda 回應承載。在顯示的範例 AspNetOnLambda
專案中,處理常式字串如下所示。
AspNetOnLambda::AspNetOnLambda.LambdaEntryPoint::FunctionHandlerAsync
若要將 API 部署至 Lambda,請執行下列命令,瀏覽至包含原始程式碼檔案的目錄,並使用 AWS CloudFormation部署函數。
cd AspNetOnLambda/src/AspNetOnLambda dotnet lambda deploy-serverless
提示
當您使用
命令部署 API 時, 會根據您在部署期間指定的堆疊名稱,為您的 Lambda 函數 AWS CloudFormation 提供名稱。若要為 Lambda 函數提供自訂名稱,請編輯 dotnet lambda deploy-serverless
serverless.template
檔案,將 FunctionName
屬性新增至 AWS::Serverless::Function
資源。如需進一步了解,請參閱《AWS CloudFormation 使用者指南》中的名稱類型。
將 ASP.NET Minimal API 部署到 Lambda
若要將 ASP.NET Minimal API 部署到 Lambda,您可以使用 .NET Lambda 範本建立新的 Minimal API 專案。使用下列命令來初始化新的 Minimal API 專案。在此範例中,我們將專案命名為 MinimalApiOnLambda
。
dotnet new serverless.AspNetCoreMinimalAPI -n MinimalApiOnLambda
此命令會在您的專案目錄中建立以下檔案和目錄。
└── MinimalApiOnLambda
└── src
└── MinimalApiOnLambda
├── Controllers
│ └── CalculatorController.cs
├── MinimalApiOnLambda.csproj
├── Program.cs
├── Readme.md
├── appsettings.Development.json
├── appsettings.json
├── aws-lambda-tools-defaults.json
└── serverless.template
Program.cs
檔案包含下列程式碼。
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Add AWS Lambda support. When application is run in Lambda Kestrel is swapped out as the web server with Amazon.Lambda.AspNetCoreServer. This
// package will act as the webserver translating request and responses between the Lambda event source and ASP.NET Core.
builder.Services.AddAWSLambdaHosting(LambdaEventSource.RestApi)
;
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.MapGet("/", () => "Welcome to running ASP.NET Core Minimal API on AWS Lambda");
app.Run();
若要將 Minimal API 設為在 Lambda 上執行,您可能需要編輯此程式碼,讓 Lambda 和 ASP.NET Core 之間的請求和回應能正確轉譯。根據預設,函數會針對 REST API 事件來源加以設定。若使用 HTTP API 或 Application Load Balancer,請以下列其中一個選項取代 (LambdaEventSource.RestApi)
:
-
(LambdaEventSource.HttpAPi)
-
(LambdaEventSource.ApplicationLoadBalancer)
若要將 API 部署至 Lambda,請執行下列命令,瀏覽至包含原始程式碼檔案的目錄,並使用 AWS CloudFormation部署函數。
cd MinimalApiOnLambda/src/MinimalApiOnLambda dotnet lambda deploy-serverless