ASP.NET 애플리케이션 배포 - AWS Lambda

ASP.NET 애플리케이션 배포

이벤트 기반 함수를 호스팅할 뿐만 아니라 Lambda와 함께.NET을 사용하여 가벼운 ASP.NET 애플리케이션을 호스팅할 수도 있습니다. Amazon.Lambda.AspNetCoreServer NuGet 패키지를 사용하여 ASP.NET 애플리케이션을 빌드하고 배포할 수 있습니다. 이 섹션에서는.NET Lambda CLI 도구를 사용하여 Lambda에 ASP.NET 웹 API를 배포하는 방법을 알아봅니다.

사전 조건

.NET 8 SDK

.NET 8 SDK 및 ASP.NET Core 런타임을 설치합니다.

Amazon.Lambda.Tools

Lambda 함수를 생성하려면 Amazon.Lambda.Tools .NET 글로벌 도구 확장을 사용합니다. Amazon.Lambda.Tools를 설치하려면 다음 명령을 실행합니다.

dotnet tool install -g Amazon.Lambda.Tools

Amazon.Lambda.Tools .NET CLI 확장에 대한 자세한 내용은 GitHub에서 AWS Extensions for .NET CLI 리포지토리를 참조하세요.

Amazon.Lambda.Templates

Lambda 함수 코드를 생성하려면 Amazon.Lambda.Templates NuGet 패키지를 사용합니다. 이 템플릿 패키지를 설치하려면 다음 명령을 실행합니다.

dotnet new --install Amazon.Lambda.Templates

Lambda에 ASP.NET 웹 API 배포하기

ASP.NET을 사용하여 웹 API를 배포하기 위해.NET Lambda 템플릿을 사용하여 새 웹 API 프로젝트를 생성할 수 있습니다. 다음 명령을 사용하여 새 ASP.NET 웹 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

Lambda에 API를 배포하려면 다음 명령을 실행하여 소스 코드 파일이 포함된 디렉토리로 이동하고 AWS CloudFormation을(를) 사용하여 함수를 배포하십시오.

cd AspNetOnLambda/src/AspNetOnLambda dotnet lambda deploy-serverless
작은 정보

dotnet lambda deploy-serverless 명령을 사용하여 API를 배포하는 경우 AWS CloudFormation에서는 배포 중에 지정한 스택 이름을 기반으로 Lambda 함수에 이름을 지정합니다. Lambda 함수에 사용자 지정 이름을 지정하려면 serverless.template 파일을 편집하여 AWS::Serverless::Function 리소스에 FunctionName 속성을 추가하십시오. 자세한 내용은 AWS CloudFormation 사용 설명서에서 이름 유형을 참조하세요.

Lambda에 ASP.NET 최소 API 배포하기

Lambda에 ASP.NET 최소 API를 배포하려면.NET Lambda 템플릿을 사용하여 새로운 최소 API 프로젝트를 생성하시면 됩니다. 다음 명령을 사용하여 새 최소 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();

Lambda에서 실행하도록 최소 API를 구성하려면 Lambda와 ASP.NET Core 간의 요청 및 응답이 제대로 변환되도록 이 코드를 편집해야 할 수 있습니다. 기본적으로 함수는 REST API 이벤트 소스에 맞게 구성됩니다. HTTP API 또는 Application Load Balancer의 경우 다음 옵션 중 하나를 사용하여 (LambdaEventSource.RestApi)을(를) 대체합니다.

  • (LambdaEventSource.HttpAPi)

  • (LambdaEventSource.ApplicationLoadBalancer)

Lambda에 최소 API를 배포하려면 다음 명령을 실행하여 소스 코드 파일이 포함된 디렉토리로 이동하고 AWS CloudFormation을(를) 사용하여 함수를 배포하십시오.

cd MinimalApiOnLambda/src/MinimalApiOnLambda dotnet lambda deploy-serverless