.NET Lambda Global CLI 사용

.NET Lambda Global CLI 사용 (Using the .NET Lambda Global CLI)

.NET CLI와 .NET Lambda Global Tools 확장(Amazon.Lambda.Tools)은 .NET 기반 Lambda 애플리케이션을 만들고 패키징하며 Lambda에 배포하는 크로스 플랫폼 방법을 제공합니다. 이 섹션에서는 .NET CLI와 Amazon Lambda 템플릿을 사용해 새 Lambda .NET 프로젝트를 만들고, Amazon.Lambda.Tools를 사용해 패키징하고 배포하는 방법을 배웁니다.

출처: AWS Lambda 개발자 안내서

본문

사전 조건

  • .NET 8 SDK — 아직 하지 않았다면 .NET 8 SDK와 Runtime을 설치하세요.
  • AWS Amazon.Lambda.Templates .NET 프로젝트 템플릿 — Lambda 함수 코드를 생성하려면 Amazon.Lambda.Templates NuGet 패키지를 사용하세요. 이 템플릿 패키지를 설치하려면 다음 명령을 실행합니다:
dotnet new install Amazon.Lambda.Templates
  • AWS Amazon.Lambda.Tools .NET Global CLI 도구 — Lambda 함수를 만들려면 Amazon.Lambda.Tools .NET Global Tools 확장을 사용합니다. 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 NuGet 패키지를 사용하는 추가 템플릿을 제공합니다.

이 패키지를 설치한 후 다음 명령을 실행해 사용 가능한 템플릿 목록을 확인합니다.

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의 자격 증명 프로필에 대해 자세히 알아보려면 AWS SDK for .NET 개발자 안내서의 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# 템플릿입니다. 직렬화 요구 사항과 옵션에 대한 자세한 내용은 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>
    <EnableDefaultCompileItems>true</EnableDefaultCompileItems>
    <PublishReadyToRun>true</PublishReadyToRun>
  </PropertyGroup>
</Project>
  • Readme — Lambda 함수를 문서화하는 데 사용하는 파일입니다.

myfunction/test 디렉터리 아래에서 다음 파일을 검토하세요:

  • myDotnetFunction.Tests.csproj — 앞서 언급했듯이 테스트 프로젝트를 구성하는 파일과 어셈블리를 나열하는 MSBuild 파일입니다. 또한 Amazon.Lambda.Core 라이브러리를 포함하므로 함수를 테스트하는 데 필요한 Lambda 템플릿을 원활하게 통합할 수 있습니다.
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    ...
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Amazon.Lambda.Core" Version="..." />
    ...
  </ItemGroup>
</Project>
  • 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

코드를 .zip 배포 패키지로 Lambda에 배포하려면 다음 명령을 실행합니다. 자체 함수 이름을 선택하세요.

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 레이어 사용

참고

.NET에서 함수와 함께 레이어를 사용하는 것이 가능하지만 권장하지는 않습니다. 레이어를 사용하는 .NET 함수는 Init 단계 동안 공유 어셈블리를 메모리에 수동으로 로드하므로 콜드 스타트 시간이 늘어날 수 있습니다. 대신 모든 공유 코드를 컴파일 시간에 포함해 .NET 컴파일러의 내장 최적화를 활용하세요.

.NET CLI는 레이어를 게시하고 레이어를 사용하는 C# 함수를 배포하는 데 도움이 되는 명령을 지원합니다. 지정된 Amazon S3 버킷에 레이어를 게시하려면 .csproj 파일과 같은 디렉터리에서 다음 명령을 실행합니다:

dotnet lambda publish-layer  --layer-type runtime-package-store --s3-bucket <bucket-name>

그런 다음 .NET CLI로 함수를 배포할 때 다음 명령에서 사용할 레이어 ARN을 지정합니다:

dotnet lambda deploy-function <function-name> --function-layers arn:aws:lambda:us-east-1:123456789012:layer:layer-name:1

Hello World 함수의 전체 예제는 blank-csharp-with-layer 샘플을 참조하세요.

더 알아보기 (Learn more)

  • .NET Lambda 함수
  • Amazon.Lambda.Tools 및 Amazon.Lambda.Templates
  • Lambda 레이어