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, Memory 과 Timeout. 여기서는 기존 역할을 선택하여 메모리를 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!"
}