.NET Lambda 글로벌 CLI 사용
.NET CLI와 .NET Lambda 글로벌 도구 확장(Amazon.Lambda.Tools
)은.NET 기반 Lambda 애플리케이션을 생성하고, 패키징하고, Lambda에 배포하는 크로스 플랫폼 방법을 제공합니다. 이 섹션에서는.NET CLI 및 Amazon Lambda 템플릿을 사용하여 새 Lambda .NET 프로젝트를 생성하고 Amazon.Lambda.Tools
을(를) 사용하여 패키징하고 배포하는 방법을 알아봅니다
사전 조건
- .NET 8 SDK
-
아직 하지 않았다면 .NET 8
SDK 및 런타임을 설치하세요. - AWS Amazon.Lambda.Templates .NET프로젝트 템플릿
-
Lambda 함수 코드를 생성하려면 Amazon.Lambda.Templates
NuGet 패키지를 사용합니다. 이 템플릿 패키지를 설치하려면 다음 명령을 실행합니다. dotnet new install Amazon.Lambda.Templates
- AWS Amazon.Lambda.Tools .NET 글로벌 CLI 도구
-
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
리포지토리를 참조하세요.
.NET CLI를 사용하여 .NET 프로젝트 생성
.NET CLI에서는 dotnet new
명령을 사용해 한 명령줄에서 .NET 프로젝트를 생성합니다. Lambda는 Amazon.Lambda.Templates
이 패키지를 설치한 후 다음 명령을 실행하여 사용 가능한 템플릿 목록을 확인합니다.
dotnet new list
템플릿에 대한 세부 정보를 검토하려면 help
옵션을 사용하세요. 예를 들어 lambda.EmptyFunction
템플릿에 대한 세부 정보를 확인하려면 다음 명령을 실행합니다.
dotnet new lambda.EmptyFunction --help
.NET Lambda 함수의 기본 템플릿을 생성하려면 lambda.EmptyFunction
템플릿을 사용하십시오. 그러면 문자열을 입력으로 받아 ToUpper
메서드를 사용하여 대문자로 변환하는 간단한 함수가 생성됩니다. 이 템플릿은 다음 옵션을 지원합니다.
-
--name
– 함수의 이름입니다. -
--region
- 함수를 생성할 AWS 리전입니다. -
--profile
– 사용자의 AWS SDK for .NET 자격 증명에 있는 프로필의 이름입니다. .NET의 보안 인증 프로필에 대한 자세한 내용은 .NET 개발자 안내서용 AWS SDK에서 AWS 보안 인증 구성을 참조하십시오.
이 예제에서는 기본 프로필 및 AWS 리전 설정을 사용하여 myDotnetFunction
(이)라는 빈 함수를 새로 만듭니다.
dotnet new lambda.EmptyFunction --name myDotnetFunction
이 명령은 프로젝트 디렉터리에 다음 파일 및 디렉터리를 생성합니다.
└── myDotnetFunction
├── src
│ └── myDotnetFunction
│ ├── Function.cs
│ ├── Readme.md
│ ├── aws-lambda-tools-defaults.json
│ └── myDotnetFunction.csproj
└── test
└── myDotnetFunction.Tests
├── FunctionTest.cs
└── myDotnetFunction.Tests.csproj
src/myDotnetFunction
디렉터리 아래에서 다음과 같은 파일들을 검사합니다.
-
aws-lambda-tools-defaults.json: Lambda 함수를 배포할 때 이 파일에 명령줄 옵션을 지정합니다. 예:
"profile" : "default", "region" : "us-east-2", "configuration" : "Release", "function-architecture": "x86_64", "function-runtime":"dotnet8", "function-memory-size" : 256, "function-timeout" : 30, "function-handler" : "myDotnetFunction::myDotnetFunction.Function::FunctionHandler"
-
Function.cs: Lambda 핸들러 함수 코드입니다. 이 코드는 기본
Amazon.Lambda.Core
라이브러리와 기본LambdaSerializer
속성을 포함하는 C# 템플릿에 속합니다. 직렬화 요구 사항들과 옵션들에 관한 자세한 내용은 Lambda 함수의 직렬화 단원을 참조하세요. 이 단원은 Lambda 함수 코드를 적용하기 위해 편집할 수 있는 하나의 샘플 함수도 포함하고 있습니다.using Amazon.Lambda.Core; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace myDotnetFunction; public class Function { /// <summary> /// A simple function that takes a string and does a ToUpper /// </summary≫ /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public string FunctionHandler(string input, ILambdaContext context) { return input.ToUpper(); } }
-
myDotnetFunction.csproj: 애플리케이션을 구성하는 파일 및 어셈블리들의 목록을 열거한 MSBuild
파일입니다. <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <!-- This property makes the build directory similar to a publish directory and helps the AWS .NET Lambda Mock Test Tool find project dependencies. --> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <!-- Generate ready to run images during publishing to improve cold start time. --> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.2.0" /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.0" /> </ItemGroup> </Project>
-
Readme: 이 파일을 사용하면 Lambda 함수를 문서화할 수 있습니다.
myfunction/test
디렉터리 아래에서 다음과 같은 파일들을 검사합니다.
-
myDotnetFunction.Tests.csproj: 앞서 언급한 것처럼 이것은 테스트 프로젝트를 구성하는 여러 파일 및 어셈블리를 열거한 MSBuild
파일입니다. 이 파일은 Amazon.Lambda.Core
라이브러리도 포함하고 있기 때문에 함수를 테스트하는 데 필요한 Lambda 템플릿을 원활하게 통합할 수 있습니다.<Project Sdk="Microsoft.NET.Sdk"> ... <PackageReference Include="Amazon.Lambda.Core" Version="2.2.0 " /> ...
-
FunctionTest.cs:
src
디렉터리에 포함된 것과 똑같은 C# 코드 템플릿 파일입니다. Lambda 함수를 프로덕션 환경에 업로드하기 전에 함수의 프로덕션 코드를 미러링하고 테스트할 수 있도록 이 파일을 편집합니다.using Xunit; using Amazon.Lambda.Core; using Amazon.Lambda.TestUtilities; using MyFunction; namespace MyFunction.Tests { public class FunctionTest { [Fact] public void TestToUpperFunction() { // Invoke the lambda function and confirm the string was upper cased. var function = new Function(); var context = new TestLambdaContext(); var upperCase = function.FunctionHandler("hello world", context); Assert.Equal("HELLO WORLD", upperCase); } } }
.NET CLI를 사용하여 .NET 프로젝트 배포하기
배포 패키지를 빌드하고 Lambda에 배포하려면 Amazon.Lambda.Tools
CLI 도구를 사용합니다. 이전 단계에서 생성한 파일로 함수를 배포하려면 먼저 함수의 .csproj
파일이 포함된 폴더로 이동하십시오.
cd myDotnetFunction/src/myDotnetFunction
코드를 Lambda에.zip 배포 패키지로 배포하려면 다음 명령을 실행합니다. 자체 함수 이름을 선택하십시오.
dotnet lambda deploy-function
myDotnetFunction
배포 중에 마법사는 실행 역할로 Lambda 함수 권한 정의을 선택하라고 요청합니다. 이 예제에서는 lambda_basic_role
을(를) 선택합니다.
함수를 배포한 후 dotnet lambda invoke-function
명령을 사용하여 클라우드에서 테스트할 수 있습니다. lambda.EmptyFunction
템플릿에 있는 예제 코드의 경우 --payload
옵션을 사용하여 문자열을 전달하여 함수를 테스트할 수 있습니다.
dotnet lambda invoke-function myDotnetFunction --payload "Just checking if everything is OK"
함수가 성공적으로 배포된 경우 다음과 유사한 출력이 표시될 것입니다.
dotnet lambda invoke-function myDotnetFunction --payload "Just checking if everything is OK"
Amazon Lambda Tools for .NET Core applications (5.8.0)
Project Home: https://github.com/aws/aws-extensions-for-dotnet-cli, https://github.com/aws/aws-lambda-dotnet
Payload:
"JUST CHECKING IF EVERYTHING IS OK"
Log Tail:
START RequestId: id
Version: $LATEST
END RequestId: id
REPORT RequestId: id
Duration: 0.99 ms Billed Duration: 1 ms Memory Size: 256 MB Max Memory Used: 12 MB
.NET CLI와 함께 Lambda 계층 사용
참고
계층을 C#과 같은 컴파일된 언어의 함수와 함께 사용하면 Python과 같은 해석된 언어의 함수와 함께 사용할 때와 같은 이점을 얻지 못할 수 있습니다. C#은 컴파일된 언어이므로 함수가 초기화 단계에서 수동으로 공유 어셈블리를 메모리로 로드해야 하기 때문에 콜드 시간 시간이 늘어날 수 있습니다. 대신 컴파일 시간에 모든 공유 코드를 포함하여 기본 제공 최적화를 활용하는 것이 좋습니다.
.NET CLI는 계층 게시 및 계층을 사용하는 C# 함수 배포에 도움이 되는 명령을 지원합니다. 지정된 Amazon S3 버킷에 계층을 게시하려면 ..csproj
파일과 동일한 디렉터리에서 다음 명령을 실행합니다.
dotnet lambda publish-layer
<layer_name>
--layer-type runtime-package-store --s3-bucket<s3_bucket_name>
그런 다음 .NET CLI를 사용하여 함수를 배포할 때 다음 명령에서 사용할 계층 ARN을 지정합니다.
dotnet lambda deploy-function
<function_name>
--function-layersarn:aws:lambda:us-east-1:123456789012:layer:layer-name:1
Hello World 함수의 전체 예제는 blank-csharp-with-layer