AWS Lambda – C #의 함수

이 장에서는 C #에서 AWS Lambda 함수를 사용하는 방법을 자세히 설명합니다. 여기에서는 Visual Studio를 사용하여 코드를 작성하고 AWS Lambda에 배포 할 것입니다. Visual Studio 설치 및 Visual Studio에 AWS 도구 키트 추가에 대한 정보 및 도움말은 다음을 참조하십시오.Introduction이 튜토리얼의 장. Visual Studio 설치가 완료되면 아래 단계를 따르십시오. 더 나은 이해를 위해 각 스크린 샷을 참조하십시오-

1 단계

Visual Studio를 열고 단계에 따라 새 프로젝트를 만듭니다. 클릭File -> New -> Project.

2 단계

이제 다음 화면이 표시됩니다. AWS Lambda for Visual C#. 고르다AWS Lambda Project (.NET Core).

필요한 경우 이름을 변경할 수 있으며 여기에서 기본 이름을 유지합니다. 딸깍 하는 소리OK 계속하다.

다음 단계에서는 Blueprint.

고르다 Empty function 이 예에서는 Finish. 아래와 같이 새로운 프로젝트 구조가 생성됩니다.

이제 선택 Function.cs AWS Lambda에 대해 이벤트 및 컨텍스트가있는 핸들러가 생성되는 기본 파일입니다.

Functions.cs 파일의 표시는 다음과 같습니다.

아래에 제공된 명령을 사용하여 입력 및 출력 파라미터를 AWS Lambda 함수에 직렬화 할 수 있습니다.

[assembly: 
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

C #에 대한 처리기 세부 정보

핸들러는 다음과 같이 표시됩니다.

public string FunctionHandler(string input, ILambdaContext context) {
   return input?.ToUpper();
}

위 코드의 다양한 구성 요소가 아래에 설명되어 있습니다.

FunctionHandler −이것이 C # AWS Lambda 함수의 시작점입니다.

String input − 핸들러에 대한 매개 변수 string input S3 객체, API 게이트웨이 세부 정보 등과 같은 모든 이벤트 데이터가 있습니다.

ILambdaContext context −ILamdaContext는 컨텍스트 세부 정보가있는 인터페이스입니다. 람다 함수 이름, 메모리 세부 정보, 시간 초과 세부 정보 등과 같은 세부 정보가 있습니다.

Lambda 핸들러는 동기화 및 비동기 방식으로 호출 할 수 있습니다. 위와 같이 동기화 방식으로 호출하면 반환 유형을 가질 수 있습니다. 반환 유형보다 비동기가 무효화되어야하는 경우.

이제 AWS Lambda C #을 배포하고 테스트 해 보겠습니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고Publish to AWS Lambda 아래와 같이-

채우기 Function Name 그리고 클릭 Next. 표시되는 다음 화면은Advanced Function Details 그림과 같이-

들어가다 Role Name, MemoryTimeout. 여기서는 기존 역할을 선택하여 메모리를 128MB로 사용하고 제한 시간을 10 초로 사용했습니다. 완료되면 클릭Upload AWS Lambda 콘솔에 게시합니다.

AWS Lambda 함수가 업로드되면 다음 화면을 볼 수 있습니다. 딸깍 하는 소리Invoke생성 된 AWS Lambda 함수를 실행합니다. 현재 작성된 코드에 따라 약간의 입력이 필요하므로 오류가 표시됩니다.

이제 샘플 입력을 입력하고 Invoke다시. 여기에서 입력 상자에 일부 텍스트를 입력하고 클릭 할 때도 동일한 텍스트를 입력했습니다.invoke응답 섹션에 대문자로 표시됩니다. 로그 출력은 아래에 표시됩니다.

이제 AWS 콘솔도 확인하여 Visual Studio에서 함수를 배포했을 때 함수가 생성되었는지 확인합니다.

위에서 생성 한 Lambda 함수는 다음과 같습니다. aws lambda using csharp 아래에 주어진 스크린 샷과 같이 AWS 콘솔에도 동일하게 표시됩니다.

핸들러 서명

핸들러는 AWS가 실행되는 시작점입니다. 핸들러의 이름은 다음과 같이 정의되어야합니다.

ASSEMBLY::TYPE::METHOD

서명에 대한 자세한 내용은 다음과 같습니다.

ASSEMBLY− 생성 된 응용 프로그램의 .NET 어셈블리 이름입니다. 기본적으로 프로젝트가 생성 된 폴더의 이름입니다.

TYPE− 핸들러의 이름입니다. 기본적으로 namespace.classname입니다.

METHOD − 이것은 함수 핸들러의 이름입니다.

핸들러 서명의 코드는 다음과 같습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
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.Json.JsonSerializer))]

namespace AWSLambda3 {
   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();
      }
   }
}

여기서 어셈블리는 AWSLamda3, 유형은 namespace.classname입니다. AWSLambda3.Function 방법은 FunctionHandler. 따라서 핸들러 서명은 다음과 같습니다.AWSLamda3::AWSLambda3.Function::FunctionHandler

C #의 컨텍스트 개체

컨텍스트 객체는 AWS 환경의 런타임에 대한 유용한 정보를 제공합니다. 컨텍스트 객체에서 사용할 수있는 속성은 다음 표와 같습니다.

Sr. 아니요 속성 및 설명
1

MemoryLimitInMB

그러면 AWS Lambda 함수에 대해 구성된 메모리에 대한 세부 정보가 제공됩니다.

2

FunctionName

AWS Lambda 함수의 이름

FunctionVersion

AWS Lambda 함수 버전

4

InvokedFunctionArn

이 함수를 호출하는 데 사용되는 ARN입니다.

5

AwsRequestId

생성 된 AWS 함수에 대한 AWS 요청 ID

6

LogStreamName

Cloudwatch 로그 스트림 이름

7

LogGroupName

Cloudwatch 그룹 이름

8

ClientContext

AWS 모바일 SDK와 함께 사용할 때 클라이언트 애플리케이션 및 디바이스에 대한 정보

9

Identity

AWS Mobile SDK와 함께 사용할 때 Amazon cogbnito 자격 증명에 대한 정보

10

RemainingTime

함수가 종료 될 때까지 남은 실행 시간

11

Logger

컨텍스트와 연관된 로거

이 섹션에서는 C #의 AWS Lambda에서 위의 속성 중 일부를 테스트 해 보겠습니다. 아래 주어진 샘플 코드를 관찰하십시오-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
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.Json.JsonSerializer))]

namespace AWSLambda6 {
   public class Function {

      /// <summary>
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public void FunctionHandler(ILambdaContext context) {
         LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
         context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
         LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
      }
   }
}

위의 코드를 호출 할 때 관찰 할 수있는 관련 출력 C# 다음과 같습니다-

위의 코드를 호출 할 때 관찰 할 수있는 관련 출력 AWS Console 다음과 같습니다-

C #을 사용하여 로깅

로깅을 위해 두 가지 기능을 사용할 수 있습니다.

  • context.Logger.Log

  • LambdaLogger.Log

여기에 표시된 다음 예를 관찰하십시오.

public void FunctionHandler(ILambdaContext context) {
   LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
   context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
   LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
}

위의 코드에 해당하는 출력은 다음과 같습니다.

아래와 같이 CloudWatch에서 로그를 가져올 수 있습니다.

Lambda 함수에 대한 C #의 오류 처리

이 섹션에서는 C #의 오류 처리에 대해 설명합니다. 오류 처리를 위해Exception 클래스는 아래에 표시된 예제와 같이 확장되어야합니다.

namespace example {            
   public class AccountAlreadyExistsException : Exception {
      public AccountAlreadyExistsException(String message) :
         base(message) {
      }
   }
} 
namespace example {
   public class Handler {
     public static void CreateAccount() {
       throw new AccountAlreadyExistsException("Error in AWS Lambda!");
     }
   }
}

위에 주어진 코드에 해당하는 출력은 다음과 같습니다.

{
   "errorType": "LambdaException",
   "errorMessage": "Error in AWS Lambda!"
}