AWS CDK을 사용하여 C# Lambda 함수 배포 - AWS Lambda

AWS CDK을 사용하여 C# Lambda 함수 배포

AWS Cloud Development Kit (AWS CDK)은(는) .NET과 같은 최신 프로그래밍 언어 및 프레임워크를 사용하여 클라우드 인프라를 코드로 정의하는 오픈 소스 소프트웨어 개발 프레임워크입니다. AWS CDK프로젝트를 실행하여 AWS CloudFormation 템플릿을 생성한 다음 이를 사용하여 코드를 배포합니다.

AWS CDK을(를) 사용하여 예제 Hello world .NET 애플리케이션을 빌드하고 배포하려면 다음 섹션의 지침을 따르십시오. 샘플 애플리케이션은 API Gateway 엔드포인트와 Lambda 함수로 구성된 기본 API 백엔드를 구현합니다. 엔드포인트에 HTTP GET 요청을 보내면 API Gateway는 Lambda 함수를 호출합니다. 함수는 요청을 처리하는 Lambda 인스턴스의 IP 주소와 함께 Hello world 메시지를 반환합니다.

사전 조건

.NET 8 SDK

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

AWS CDK 버전 2

AWS CDK의 최신 버전을 설치하는 방법을 알아보려면 AWS Cloud Development Kit (AWS CDK) v2 개발자 안내서AWS CDK(으)로 시작하기를 확인하십시오.

샘플 AWS CDK 애플리케이션 배포

  1. 샘플 애플리케이션을 위한 프로젝트 디렉터리를 생성하고 탐색합니다.

    mkdir hello-world cd hello-world
  2. 다음 명령을 실행하여 새 AWS CDK 애플리케이션을 초기화합니다.

    cdk init app --language csharp

    이 명령은 프로젝트 디렉터리에 다음과 같은 파일 및 디렉터리를 생성합니다

    ├── README.md ├── cdk.json └── src ├── HelloWorld │   ├── GlobalSuppressions.cs │   ├── HelloWorld.csproj │   ├── HelloWorldStack.cs │   └── Program.cs └── HelloWorld.sln
  3. src 디렉터리를 열고 .NET CLI를 사용하여 새 Lambda 함수를 생성합니다. AWS CDK을(를) 사용하여 배포할 함수입니다. 이 예제에서는 lambda.EmptyFunction 템플릿을 사용하여 HelloWorldLambda(이)라는 Hello world 함수를 생성합니다.

    cd src dotnet new lambda.EmptyFunction -n HelloWorldLambda

    이 단계 후에 프로젝트 디렉터리 내부의 디렉터리 구조는 다음과 같아야 합니다.

    ├── README.md ├── cdk.json └── src ├── HelloWorld │   ├── GlobalSuppressions.cs │   ├── HelloWorld.csproj │   ├── HelloWorldStack.cs │   └── Program.cs ├── HelloWorld.sln └── HelloWorldLambda ├── src │   └── HelloWorldLambda │   ├── Function.cs │   ├── HelloWorldLambda.csproj │   ├── Readme.md │   └── aws-lambda-tools-defaults.json └── test └── HelloWorldLambda.Tests ├── FunctionTest.cs └── HelloWorldLambda.Tests.csproj
  4. src/HelloWorld 디렉터리에서 HelloWorldStack.cs 파일을 엽니다. 파일의 내용을 다음 코드로 바꿉니다.

    using Amazon.CDK; using Amazon.CDK.AWS.Lambda; using Amazon.CDK.AWS.Logs; using Constructs; namespace CdkTest { public class HelloWorldStack : Stack { internal HelloWorldStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { var buildOption = new BundlingOptions() { Image = Runtime.DOTNET_8.BundlingImage, User = "root", OutputType = BundlingOutput.ARCHIVED, Command = new string[]{ "/bin/sh", "-c", " dotnet tool install -g Amazon.Lambda.Tools"+ " && dotnet build"+ " && dotnet lambda package --output-package /asset-output/function.zip" } }; var helloWorldLambdaFunction = new Function(this, "HelloWorldFunction", new FunctionProps { Runtime = Runtime.DOTNET_8, MemorySize = 1024, LogRetention = RetentionDays.ONE_DAY, Handler = "HelloWorldLambda::HelloWorldLambda.Function::FunctionHandler", Code = Code.FromAsset("./src/HelloWorldLambda/src/HelloWorldLambda", new Amazon.CDK.AWS.S3.Assets.AssetOptions { Bundling = buildOption }), }); } } }

    Lambda 함수 자체의 정의뿐만 아니라 애플리케이션 코드를 컴파일하고 번들링하는 코드입니다. BundlingOptions 객체를 사용하면 zip 파일의 콘텐츠를 생성하는 데 사용되는 명령 집합과 함께 zip 파일을 생성할 수 있습니다. 이 경우 dotnet lambda package 명령은 zip 파일을 컴파일하고 생성하는 데 사용됩니다.

  5. 애플리케이션을 배포하려면 다음 명령을 입력합니다.

    cdk deploy
  6. .NET Lambda CLI를 사용하여 배포된 Lambda 함수를 호출하십시오.

    dotnet lambda invoke-function HelloWorldFunction -p "hello world"
  7. 테스트를 마친 후 생성한 리소스를 보관하고 싶지 않다면 삭제해도 됩니다. 다음 명령을 실행하여 리소스를 삭제합니다.

    cdk destroy

다음 단계

.NET을 사용하여 Lambda 함수를 빌드하고 배포하기 위해 AWS CDK을(를) 사용하는 방법에 대해 자세히 알아보려면 다음 리소스를 참조하십시오.