AWS Lambda – NODEJS의 함수

Nodejs는 AWS Lambda 함수가 지원하는 언어 중 하나입니다. nodejs에서 지원하는 버전은 v6.10 및 v8.10입니다. 이 장에서는 NODEJS에서 AWS Lambda 함수의 다양한 기능에 대해 자세히 알아 봅니다.

NodeJS의 핸들러

nodejs에서 AWS Lambda 함수를 작성하려면 먼저 핸들러를 선언해야합니다. nodejs의 핸들러는 파일의 이름과 내보내기 기능의 이름입니다. 예를 들어 파일 이름은 다음과 같습니다.index.js 내보내기 기능 이름은 lambda handler이므로 해당 핸들러는 index.lambdahandler

여기에 표시된 샘플 처리기를 관찰하십시오.

exports.lambdahandler = function(event, context, callback) {   //code goes here}

핸들러에 대한 매개 변수

핸들러는 Lambda 함수를 구축하기위한 주요 핵심입니다. 핸들러는 세 개의 매개 변수를 사용합니다.event, contextcallback.

이벤트 매개 변수

트리거 된 이벤트의 모든 세부 정보가 있습니다. 예를 들어 Lambda 함수를 사용하여 S3에서 트리거하는 경우 이벤트에는 S3 객체의 세부 정보가 포함됩니다.

컨텍스트 매개 변수

Lambda 함수의 속성 및 구성 세부 정보와 같은 컨텍스트 세부 정보가 있습니다.

콜백 기능

발신자에게 세부 정보를 제공하는 데 도움이됩니다. 콜백 구조는 다음과 같습니다.

callback(error, result);

콜백 함수의 매개 변수는 아래에 설명되어 있습니다.

Error −Lambda 함수 실행 중 오류가 발생한 경우 세부 정보가 포함됩니다. Lambda 함수가 성공하면null 콜백 함수의 첫 번째 매개 변수로 전달할 수 있습니다.

Result −이것은 람다 함수의 성공적인 실행에 대한 세부 정보를 제공합니다. 오류가 발생하면 결과 매개 변수가 무시됩니다.

Note −AWS Lambda에서 콜백 함수를 사용할 필요는 없습니다. 콜백 함수가없는 경우 핸들러는이를 null로 반환합니다.

유효한 콜백 서명은 다음과 같습니다.

callback();                // It will return success, but no indication to the caller
callback(null);            // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error);           //  It will return the error indication to the caller

AWS Lambda가 실행될 때마다 오류 또는 성공과 같은 콜백 세부 정보가 콘솔 메시지 (있는 경우)와 함께 AWS CloudWatch에 기록됩니다.

Nodejs8.10에서 AWS Lambda 작업

nodejs8.10에서 AWS Lambda로 작업하고 동기화 및 비동기 방식으로 함수를 호출하는 방법을 이해하겠습니다.

동기화 방식으로 Lambda 함수 호출

다음 예제는 동기화 방식으로 Lambda 함수를 호출하는 방법에 대한 아이디어를 제공합니다.

exports.handler = function(event, context, callback) {
   let arrItems = [4,5,6,8,9,10,35,70,80,31];
   function countevennumbers (items) {
      return new Promise(resolve => {
         setTimeout(() => {
            let a = 0;
            for (var i in items) {
               if (items[i] % 2 == 0) {
                  a++;
               } 
            }
            resolve(a);
         },2000);
      });
   }
   let evennumber = countevennumbers(arrItems);
   callback(null,'even numbers equals ='+evennumber);
};

AWS 콘솔에서이 코드를 테스트 한 후 다음 출력을 관찰 할 수 있습니다.

위 코드의 출력은 promise 객체입니다. 개수는 setTimeout 내에서 증가하고 함수 호출은 setTimeout 내에서 실행을 기다리지 않고 promise 객체를 반환하므로 개수를 제공하지 않습니다.

만약 우리가 async/await 핸들러 함수에서 람다 함수의 정확한 출력을 얻습니다.

비동기 방식으로 처리기 호출

다음 예제는 비동기 방식으로 Lambda 함수를 호출하는 방법에 대한 아이디어를 제공합니다.

exports.handler = async function(event, context, callback) {
   let arrItems = [4,5,6,8,9,10,35,70,80,31];
   function countevennumbers (items) {
      return new Promise(resolve => {
         setTimeout(() => {
            let a = 0;
            for (var i in items) {
               if (items[i] % 2 == 0) {
                  a++;
               } 
            }
            resolve(a);
         }, 2000);
      });
   }
   let evennumber = await countevennumbers(arrItems);
   callback(null,'even numbers equals ='+evennumber);
};

우리는 추가했습니다 asyncawait위의 코드에서. 우리가 사용할 때await함수 호출 외에 함수 내부의 약속이 해결 될 때까지 실행이 일시 중지됩니다. 참고await 유효하다 async 기능.

AWS 콘솔에서이 코드를 테스트 한 후 다음 출력을 관찰 할 수 있습니다.

NodeJS의 ContextDetails

컨텍스트 객체는 Lambda 함수의 이름, 남은 시간 (밀리 초), 요청 ID, Cloudwatch 그룹 이름, 시간 초과 세부 정보 등과 같은 세부 정보를 제공합니다.

다음 표는 컨텍스트 객체와 함께 사용할 수있는 메소드 및 속성 목록을 보여줍니다.

컨텍스트 개체에 사용할 수있는 메서드

Sr. 아니요 방법 이름 및 설명
1

getRemainingTimeInMillis()

이 메서드는 Lambda 함수가 함수를 종료 할 때까지 남은 시간을 밀리 초 단위로 제공합니다.

컨텍스트 객체에 사용할 수있는 속성

Sr. 아니요 속성 이름 및 설명
1

functionName

이렇게하면 AWS Lambda 함수 이름이 제공됩니다.

2

functionVersion

그러면 실행되는 AWS Lambda 함수 버전이 제공됩니다.

nvokedFunctionArn

그러면 ARN 세부 정보가 제공됩니다.

4

memoryLimitInMB

Lambda 함수를 생성하는 동안 추가 된 메모리 제한을 보여줍니다.

5

awsRequestId

이것은 AWS 요청 ID를 제공합니다.

6

logGroupName

이것은 cloudwatch 그룹 이름의 이름을 제공합니다

7

logStreamName

그러면 로그가 기록되는 Cloudwatch 로그 스트림 이름의 이름이 제공됩니다.

8

identity

AWS Mobile SDK와 함께 사용할 때 Amazon cognito 자격 증명 공급자에 대한 세부 정보를 제공합니다.

주어진 세부 사항은 다음과 같습니다-

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

clientContext

이는 aws mobile sdk와 함께 사용할 때 클라이언트 애플리케이션에 대한 세부 정보입니다. 주어진 세부 사항은 다음과 같습니다-

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom-모바일 클라이언트 앱의 사용자 정의 값 사전이 있습니다.
  • client_context.env-AWS Mobile SDK의 환경 세부 정보가 있습니다.

컨텍스트 객체에 대한 더 나은 아이디어를 얻으려면 다음 예제를보십시오.

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log('Remaining time =>', context.getRemainingTimeInMillis());
   console.log('functionName =>', context.functionName);
   console.log('AWSrequestID =>', context.awsRequestId);
   console.log('logGroupName =>', context.log_group_name);
   console.log('logStreamName =>', context.log_stream_name);
   console.log('clientContext =>', context.clientContext);
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

AWS 콘솔에서이 코드를 테스트 한 후 다음 출력을 관찰 할 수 있습니다.

AWS 콘솔에서이 코드를 테스트 한 후 다음 로그 출력을 관찰 할 수 있습니다.

NodeJS에 로그인

Console.log를 사용하여 NodeJS에 로그인 할 수 있습니다. 로그 세부 정보는 Lambda 함수에 대해 CloudWatch 서비스에서 가져올 수 있습니다.

더 나은 이해를 위해 다음 예를 참조하십시오.

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log('Logging for AWS Lamnda in NodeJS');
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

AWS 콘솔에서이 코드를 테스트 한 후 다음 출력을 관찰 할 수 있습니다.

CloudWatch에서 다음 스크린 샷을 볼 수 있습니다.

NodeJS에서 오류 처리

NodeJS에서 오류 알림이 어떻게 수행되는지 이해합시다. 다음 코드를 관찰하십시오-

exports.handler = function(event, context, callback) {
   // This Source code only throws error. 
   var error = new Error("something is wrong");
   callback(error);   
};

로그 출력에서 ​​다음을 관찰 할 수 있습니다.

오류 세부 정보는 다음과 같이 콜백에 제공됩니다.

{
   "errorMessage": "something is wrong",
   "errorType": "Error",
   "stackTrace": [    "exports.handler (/var/task/index.js:2:17)"  ]
}