.NET 환경에서 EC2 관련 AWS Lambda 개발

AWS Lambda 배포 설정

  • aws-lambda-tools-defaults.json 파일에 구성합니다. 일종의…게시 프로필 이라고 생각하시면 될 것 같습니다. Visual Studio 2022와 잘 통합되어 있는 Azure의 경우 Visual Studio 2022의 Publish 기능에 게시 프로필을 생성하는 게 있는데 그것과 같은 역할을 한다고 보시면 됩니다. Visual Studio 2022에서는 기본적으로 1개를 다루지만, 게시 프로필을 여러개 만들면 dotnet 명령어로 다양하게 배포할 수 있기 때문에 .NET 프로젝트 1개 안에 여러개의 AWS Lambda Class, Method를 생성하고 여러 AWS Lambda로 배포하여 각기 다른 기능을 하게 할 수 있습니다. 즉, 여러 개의 Lambda를 다루기 위해서 .NET 프로젝트를 1:1 대응으로 여러개 만들 필요가 없다는 것입니다. 1개의 .NET 프로젝트와 N:M 관계의 Class와 게시 프로필 관계이면 됩니다.
  • 임의로 변수는 대괄호[ ] 안에 표기하겠습니다.
{
    "Information" : [
        "[문자열1]",
        "[문자열2]"
    ],
    "profile"     : "[AWS Region ID]",
    "region"      : "[AWS 리전 이름 ex) us-west-2]",
    "configuration" : "[빌드 형태 ex) Release, Debug]",
    "function-architecture" : "[아키텍쳐 ex) x64, arm64]",
    "function-runtime"      : "[.NET 버전 ex) dotnet8]",
    "function-memory-size"  : 512,
    "function-timeout"      : 15,
    "function-handler"      : "[.NET 어셈블리 이름::네임스페이스.클래스 명::Lambda로 트리거되는 메서드 이름]",
    "framework"             : "net8.0",
    "function-name"         : "[AWS Lambda 리소스 이름]",
    "function-description"  : "",
    "package-type"          : "Zip",
    "function-role"         : "[AWS Lambda 리소스를 만들면 만들 때 role을 새로 생성할 수도 있고, 기존의 role을 가져다 쓸 수도 있습니다. 그 role의 ARN을 적습니다.]",
    "function-subnets"      : "",
    "function-security-groups" : "",
    "tracing-mode"             : "PassThrough",
    "environment-variables"    : "",
    "image-tag"                : ""
}

AWS role이 놓치기 쉬운 부분인데 지금 예제로 드는 EC2를 제어하는 AWS Lambda의 경우 새로 생성한 권한이던, 기존에 있던 권한이던, 권한 정책에 아래 두개의 정책이 들어있어야만 제어가 가능합니다.

  • ElasticLoadBalancingFullAccess
  • ElasticLoadBalancingReadOnly
1개의 좋아요